C# 从JavaScript调用代码隐藏函数(不是AJAX!)
我在服务器端有一个函数C# 从JavaScript调用代码隐藏函数(不是AJAX!),c#,javascript,asp.net,webforms,C#,Javascript,Asp.net,Webforms,我在服务器端有一个函数 protected void SelectParticipant(string CompanyId, string EmployeeNumber) { //I do some stuff here. } 我想从客户端的JavaScript调用这个函数。我尝试过搜索它,但我找到的所有建议都是通过AJAX调用Page方法。我不想那样,我想引起回发 function MyJSFunction(companyid, employeenumber) { //cau
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引发回发并运行服务器端函数?您可以使用两个
HiddenField
解决问题
- 使用js/jquery设置两个HiddenField(根据您的喜好)
- 在js函数中强制表单提交(
)form1.submit()
- 在formLoad中,检查HiddenFields是否为空。如果没有,请运行您的方法,然后清除隐藏字段
- 我是这样做的
<script type="text/javascript">
function AddParticipant(companyid, employeenumber)
{
$("#AddParticipantPanel").dialog("close");
var myargs = {CompanyId: companyid, EmployeeNumber: employeenumber};
var myargs_json = JSON.stringify(myargs);
__doPostBack('<%= SelectParticipantBtn.UniqueID %>', myargs_json);
}
</script>
<asp:Button runat="server" ID="SelectParticipantBtn" ClientIDMode="Static" OnClick="SelectParticipantBtn_Click" style="display:none;" />
功能添加参与者(公司ID、员工编号)
{
$(“添加参与者面板”)。对话框(“关闭”);
var myargs={CompanyId:CompanyId,EmployeeNumber:EmployeeNumber};
var myargs_json=json.stringify(myargs);
__doPostBack(“”,myargs_json);
}
在服务器端
/* 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<SelectParticipantEventArgs>(args);
string emp_no = myargs.EmployeeNumber;
string company_id = myargs.CompanyId;
//do stuff with my arguments
}
/*这是一个内部类*/
公共类SelectParticipantEventArgs
{
公共字符串CompanyId{get;set;}
公共字符串EmployeeNumber{get;set;}
}
受保护的void SelectParticipantBtn\u单击(对象发送者,事件参数e)
{
字符串args=Request.Form[“\uu EVENTARGUMENT”];
var myargs=JsonConvert.DeserializeObject(args);
字符串emp_no=myargs.EmployeeNumber;
字符串company_id=myargs.CompanyId;
//用我的论点做点什么
}
我没有使用HiddenFields,而是使用了一个隐藏按钮。此模型工作得更好,因为我可以直接转到按钮的事件处理程序,而不必向Page_Load函数添加代码。您可以使用u doPostBack函数发布到服务器。只需确保在页面中添加服务器控件,以便插入该函数。以下是一个小示例,您可以根据自己的需要进行自定义: aspx:
确保将EnableEventValidation=“false”属性添加到页面。+1谢谢,我使用的解决方案在概念上与此类似。+1在您发布它之前几分钟,我设法解决了这个问题。我确实有一个改进:我将参数作为JSON对象传递,以避免需要解析字符串。在我发布自己的文章时,我看到你这样做了……JSON的东西肯定更优雅。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Try1.WebForm1" EnableEventValidation="false"%>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="Scripts/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('#lblInvoke').hover(
function () {
__doPostBack('<%= LinkButton1.ClientID %>', 'value1,value2');
}
);
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<label id="lblInvoke">Hover This!</label>
<br />
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click" Style="display:none;">LinkButton</asp:LinkButton>
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>
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]);
}
}
}