Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从JavaScript调用代码隐藏函数(不是AJAX!)_C#_Javascript_Asp.net_Webforms - Fatal编程技术网

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]);
              }
          }
      }