【问题标题】:How to pass data between different c# and javascript如何在不同的c#和javascript之间传递数据
【发布时间】:2014-07-24 11:52:53
【问题描述】:

我有一个带有 div 的 ascx 页面,当点击 div 时它会调用一个 JS 函数并发送一个 int

//HTML

<div style="float: right; margin-right: 150px;" class="innerDivStyle"
onclick="userStartExtend(2)">        
        <h1 style="margin-top: 50px">Product</h1>
    </div>

//JavaScript函数

 function userStartExtend(num) {}

我需要在 c#(文件/页面/代码)中使用 userStartExtend 函数中的 num。我想到了查询字符串 - 在 javascript 代码中设置并在 c# 中获取(可能吗?)。还有其他想法吗?? 说清楚点:c# 代码和 javascript 代码不共享同一个页面。

【问题讨论】:

  • 细节有点模糊。页面渲染到浏览器时,js代码和那个div是否渲染在同一个html文档中?
  • 真的不清楚你想要完成什么。所以...在userStartExtend() 中计算出一个数值。服务器端代码在哪里需要这个值?该值是否需要在客户端计算?如果服务器端代码在稍后的页面上需要它,您可以将它放在查询字符串中以获得该页面的链接吗?如果它在当前页面上需要它,您可以在 AJAX 调用中将值发送到服务器吗?
  • 是的,div和js代码在同一个文档,只有c#在不同的页面
  • 你可以在你的javascript aspsnippets.com/Articles/…中运行一个ajax webmethod@
  • 我会尝试清除它。用户需要选择一个选项,他在单击 div 后单击 div,他(用户)将获得特定信息。例如,他点击了上面的 div 并将数字 2 传递给 userStartExtend 函数。在另一个 ascx 中,我需要根据用户选择显示数据,在这种情况下,我需要数字二来了解用户选择的内容。

标签: c# javascript jquery html asp.net


【解决方案1】:

如果他想将某些东西从 Javascript 传递到 .NET,他通常会使用 eventHandlers,只是不要忘记添加属性runat="server" id="DivId" and event handler OnServerClick="DivHandler".

例子:

<div runat="server" id="DivId" OnServerClick="DivHandler" style="float: right; margin-right: 150px;" class="innerDivStyle" onclick="userStartExtend(2)"  >        
    <h1 style="margin-top: 50px">Product</h1>
</div>

然后在 C# 方面

public void DivHandler(object sender, EventArgs e)
{
   //here sender is your <div> and e is data about 'click' event.
}

更新:OnServerClick 似乎无法正常工作。这是解决方法

HTML:

<div runat="server" id="DivId" OnServerClick="testMe('param1')" style="float: right; margin-right: 150px;" class="innerDivStyle" onclick="userStartExtend(2)"  >        
    <h1 style="margin-top: 50px">Product</h1>
</div>

JavaScript:

function testMe(params) {
    var btnID= '<%=MyButton.ClientID %>';          
    __doPostBack(btnID, params);
}

服务器端Page_Load:

 string parameter = Request["__EVENTARGUMENT"];
 if (parameter == "param1")
     MyButton_Click(sender, e);

【讨论】:

【解决方案2】:

让你的div 服务器端

<div id="serverSideId" runat="server" />

在你的 C# 代码中,Page_PreRender 应该有这个

int myValue = 2;
serverSideId.OnClientClick = "userStartExtend(" + myValue.ToString() + ")";

【讨论】:

    【解决方案3】:

    在你的使用控件中添加一个隐藏的Field控件

    <asp:HiddenField ID="hdnval" runat="server" Value="" Visible="false"> 
    

    像这样更新你的javascript函数

    function userStartExtend(num) {
    var myHidden=  document.getElementById('<%= hdnval.ClientID %>');
    
     if(myHidden)
     {
     myHidden.value=num;
     }
    
    }
    

    现在使用可以在代码后面访问这个服务器控件

    【讨论】:

      猜你喜欢
      • 2018-09-10
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多