javascript - 将数据从客户端传递到服务器端

标签 javascript asp.net client-side

我正在编写一个 ASP.NET 应用程序。

我有一个页面,用户将在其中选择或取消选择某些元素。这种情况发生在客户端:当用户单击 div 时,将调用 javascript 函数并更改某些类,因此该 div 会“变灰”。
还有一个“保存”按钮 (asp:Button),用于保存数据。

将所选元素的信息传递回服务器端的最佳方式是什么?

我尝试将这些信息放入 cookie 中。每个 div 都有 ID,因此我将使用该 ID 和 bool 值创建 cookie。这是一个坏主意,因为:
- 当用户(取消)选择某些元素,然后导航离开页面而不保存
- 然后导航回来,在不选择任何内容的情况下单击“保存”,cookie 具有先前的值并被保存。

最佳答案

除了 Cookie 之外,您尝试过的都很好。我可以理解您面临的问题。 所以我建议使用隐藏字段而不是Cookie。

当您的 div 被选中时,调用 javascript 函数并将值(以特定格式)存储在隐藏字段中。以同样的方式,当您的 div 被取消选择时,从 HiddenField 中删除该值。

您可以按以下格式在HiddenField中存储值(ID:值):

div1:true;div2:true;div3:true

现在,在按钮的单击事件上,您可以首先用分号(';')分割值,您将得到如下数组:

  1. div1:true,
  2. div2:true,
  3. div3:假

对于每个值,再次用冒号(':')分割值,您将获得第 0 个索引处的 div id 及其第一个索引处的值。

所以基本上,从隐藏字段获取值并对其执行操作的代码将如下所述:

foreach (var selectedDiv in this.hfSelected.Value.Split(';'))
{
    var divId = selectedDiv.Split(':')[0];
    var divValue = selectedDiv.Split(':')[1];

    // Perform action on divId and divValue
}

更新:

要将值存储在HiddenField中,可以使用按钮的OnClientClick事件代替div click,并获取selected的值> 和取消选择 div。请参阅下面的代码示例:

ASPX 页面:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript" src="Scripts/jquery-1.8.2.js" language="javascript"></script>
    <script type="text/javascript" src="Scripts/jquery-1.8.2.min.js" language="javascript"></script>
    <script type="text/javascript" src="Scripts/jquery-ui-1.9.1.custom.js" language="javascript"></script>
    <script type="text/javascript" src="Scripts/jquery-ui-1.9.1.custom.min.js" language="javascript"></script>
    <style type="text/css">
        .selectedDiv {
            background-color: #333;
            color: #fff;
            height: 30px;
            width: 100%;
        }

        .deselectedDiv {
            background-color: #bababa;
            color: #000;
            height: 30px;
            width: 100%;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
        <div class="selectedDiv" id="div1">I am Div 1</div>
        <div class="selectedDiv" id="div2">I am Div 2</div>
        <div class="selectedDiv" id="div3">I am Div 3</div>
        <div class="selectedDiv" id="div4">I am Div 4</div>
        <div class="selectedDiv" id="div5">I am Div 5</div>

        <input type="hidden" id="hfDivSelection" runat="server" />

        <asp:Button runat="server" ID="buttonSave" OnClick="buttonSave_OnClick"  Text ="Save" OnClientClick="GetSelection()"/>
    </form>
     <script type="text/javascript">
         $('div').click(function () {
             var css = $(this).attr('class');

             if (css == 'selectedDiv') {
                 $(this).attr('class', 'deselectedDiv');
             } else {
                 $(this).attr('class', 'selectedDiv');
             }

         });

         function GetSelection() {
             $('div').each(function() {
                 var values = $('#<%=hfDivSelection.ClientID%>').val();
                 var css = $(this).attr('class');
                 var divId = $(this).attr('id');
                 if (css == 'selectedDiv') {
                     $('#<%=hfDivSelection.ClientID%>').val(values + divId + ':true;');
                 } else if (css == 'deselectedDiv') {
                     $('#<%=hfDivSelection.ClientID%>').val(values + divId + ':false;');
                 }
             });
         }
    </script>
</body>
</html>

隐藏代码:

protected void buttonSave_OnClick(object sender, EventArgs e)
{
    foreach (var selectedDiv in this.hfDivSelection.Value.Split(';'))
    {
        var divId = selectedDiv.Split(':')[0];
        var divValue = selectedDiv.Split(':')[1];

        // Perform action on divId and divValue
    }
}

关于javascript - 将数据从客户端传递到服务器端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21547398/

相关文章:

javascript - 在 jquery 中使用 .replaceWith 删除 HTML 中的字符串

javascript - fbevents.js 可以覆盖 Google Analytics 事件跟踪吗?

c# - 在您的 app.config 中使用加密的 appSettings 元素有多安全?

.net - 从对象模型而不是数据库获取 FailedPasswordAttemptCount 的值

javascript - 关于 JavaScript 函数参数

javascript - 在哪里对集合进行排序会更快 - 客户端还是服务器端?

javascript - Ecma6, Object.assign 不做深拷贝

javascript - 将delphi Canvas 椭圆函数移植到javascript弧函数

asp.net - 使用 jQuery 突出显示选定的 ASP.NET DataGrid 行

html - 如何在使用客户端路由的同时在页面内实现链接?