从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函数。