【问题标题】:How to pass a javascript variable to server side method如何将javascript变量传递给服务器端方法
【发布时间】:2015-01-15 07:48:09
【问题描述】:

我面临的问题是我无法将 javascript 变量传递到服务器端标签在服务器端,但不幸的是我得到了隐藏字段的空值。帮我解决这个问题

代码

$(document).ready(function(){
  var DataID = "4325";
    testDataVal(DataID);
});

function testDataVal(DataID){

<%=RenderMethod(DataID) %>  // How to pass javascript variable to server side

}

隐场方法:

$(document).ready(function(){
     var DataID = "4325";
    testDataVal(DataID);
});

function testDataVal(DataID){
   $("#<%=hdnDataVal.ClientID %>").val(DataID);

  alert($("#<%=hdnDataVal.ClientID %>").val(DataID));    // Here using javascript I can able to set the value and when I alert the value it is displayed

  <%=RenderMethod(hdnDataVal.Value) %>  // here the hiddenfield value is empty

}

    <asp:HiddenField runat="server" ID="hdnDataVal"  />

【问题讨论】:

  • 您需要将变量放入表单并提交,或者使用 AJAX 请求。您不能将 JS 变量应用于 C# 代码,因为一个是客户端,另一个是服务器端。
  • @RoryMcCrossan 但如果我使用 hiddenfield 也不起作用
  • 你在哪里设置DataID的值?
  • 其实 Render 方法来自另一个库,它不是直接方法
  • 您获得了值,但在服务器端生成页面时它是空的。当页面生成并发送到客户端时, 已经输出了一个值为空的 hdnDataVal.Value。

标签: javascript c# jquery asp.net .net


【解决方案1】:

首先...您不应该按照自己的方式混合服务器代码和客户端代码。

这是一种糟糕的代码设计方式。始终尝试将客户端和服务器代码分开。它们在不同的时刻、地点和不同的环境下执行……将它们放在一起最终会使您陷入难以调试的错误。

我敢打赌,您在这里遇到的问题是由于这种编码方式造成的。

你在你的代码sn-p上说

<%=RenderMethod(hdnDataVal.Value) %>  // here the hiddenfield value is empty

当您的页面正在加载并执行服务器代码时,$(document).ready() 中的代码尚未触发,因为它会在您的整个页面完成加载时触发。因此,您的 RenderMethod 会在 您将任何值放入变量之前触发。

【讨论】:

    【解决方案2】:

    尝试使用 $.ajax();

    var url = 'my-url.aspx';
    $.ajax({
        url: url,
        type: 'POST',
        data: {'variable_name': my_variable },
        success: function(html)
        { 
          alert('ok');
        },
    
    });
    

    和服务器端的接收者:

    string my_variable = Request.Form['variable_name'];
    

    【讨论】:

      【解决方案3】:

      您可以使用Page Method 从客户端进行服务器端调用。这可能是实现您想要的最简单的方法。

      首先,您需要在启用Page Methods 的aspx 页面中包含脚本管理器:

      <asp:ScriptManager ID="scrmgr" EnablePageMethods="true" runat="server" /> 
      

      现在您可以调用服务器端方法并将您想要的客户端数据传递给它,就像这样:

      <script type="text/javascript">
          $(document).ready(function(){
              var DataID = "4325";
              testDataVal(DataID);
          });
      
          function testDataVal(DataID) {
              PageMethods.RenderMethod(DataID, OnSuccess, OnError);
          }
      
          function OnSuccess(result) {
              alert(result);
          }
      
          function OnError() {
              alert('Some error has ocurred!');
          }
          </script>
      

      OnSuccess 函数在成功调用服务器端方法的情况下被调用。否则会调用OnError 函数。

      这就是应该在 .aspx.cs 文件中声明 Page Method 的方式:

      [System.Web.Services.WebMethod]
      public static string RenderMethod(string dataID)
      {
          return "Got here!";
      }
      

      如果您在RenderMethod 中放置一个断点,那么您可以验证客户端数据(即值“4325”)是否正确传递给它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-14
        • 1970-01-01
        相关资源
        最近更新 更多