从JavaScript调用函数背后的代码(不是AJAX!)

我的服务器端有一个function。

protected void SelectParticipant(string CompanyId, string EmployeeNumber) { //I do some stuff here. } 

我想在客户端从JavaScript调用此函数。 我试过搜索它,但我发现的所有建议都是通过AJAX调用Page方法。 我不想那样,我想引发一个回发。

 function MyJSFunction(companyid, employeenumber) { //cause postback and pass the companyid and employee number //this is where I need help! } 

如何从我的JavaScript中引发回发并运行服务器端function?

您可以使用两个HiddenField解决您的问题。

  • 使用js / jquery设置两个HiddenField(如您所愿)
  • 强制在js函数中提交表单( form1.submit()
  • 在formLoad中检查HiddenFields是否为空。 如果没有运行您的方法,然后清除HiddenFields

您可以使用__doPostBack函数发布到服务器。 只需确保向页面添加服务器控件,以便插入该function。 这是一个小例子,您可以根据自己的需要进行自定义:

ASPX:

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Try1.WebForm1" EnableEventValidation="false"%>         

代码背后:

 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace Try1 { public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void LinkButton1_Click(object sender, EventArgs e) { string passedArgument = Request.Params.Get("__EVENTARGUMENT"); string[] paramsArray = passedArgument.Split(','); Label1.Text = string.Format("Returned from server. params: {0},{1}", paramsArray[0], paramsArray[1]); } } } 

确保将EnableEventValidation =“false”属性添加到页面。

这是我怎么做的……

   

在服务器端……

 /* this is an inner class */ public class SelectParticipantEventArgs { public string CompanyId {get; set;} public string EmployeeNumber {get; set;} } protected void SelectParticipantBtn_Click(object sender, EventArgs e) { string args = Request.Form["__EVENTARGUMENT"]; var myargs = JsonConvert.DeserializeObject(args); string emp_no = myargs.EmployeeNumber; string company_id = myargs.CompanyId; //do stuff with my arguments } 

我没有使用HiddenFields,而是使用了一个隐藏按钮。 这个模型效果更好,因为我可以直接进入按钮的事件处理程序,而不必将代码添加到Page_Load函数。