通过JS / jQuery动态更新Asp.Net数据属性,但通过

时间:2016-04-17 02:22:57

标签: c# jquery asp.net

我有一个aspx页面的图片,当选中时,会出现一个弹出窗口,提示输入各种信息,然后我通过使用jQuery将信息作为数据属性存储在隐藏标签上(即data-id="####",{{ 1}}等。我承认这不是最好的方法,但我尝试了其他的东西(见下文),但还没有任何工作。

我一直在尝试并无济于事,检索动态更新的数据属性,以便将各种项目存储到我的本地ms sql数据库中。更新属性非常有效,因为我可以在Chrome的开发者工具中正确查看正在更新的项目。尽管如此,当我尝试拉出相同的属性时,我可以看到它被更新,我无法在后面的代码中检索更新的值并继续获取初始值(通常是空字符串“”)。

这是aspx页面上的实现:

data-difficulty="###"

以下是在同一页面上进一步点击“提交”按钮时调用的相关方法:

<asp:Label runat="server" ID="lblSelection" data-id="" data-count="" data-price="" data-difficulty=""  CssClass="selected-items" />

问题在于,当我在调试模式下运行项目并检查这些元素时(再次确保我可以直观地看到属性在开发人员工具中实际更新),它们都是“”的初始值。 。我唯一的猜测是,有一些回发问题,但我不认为这会发生,直到我的方法被调用和完全处理。作为一个注释,我正在将图像填充到页面上并根据项目的ID通过sql调用更新其属性:

protected void SubmitClicked(object sender, EventArgs e)
{
    var currentID = lblSelection.Attributes["data-id"];
    var currentCount = lblSelection.Attributes["data-count"];
    var currentPrice = lblSelection.Attributes["data-price"];
    var currentDifficulty = lblSelection.Attributes["data-difficulty"];

    if (currentID == null || currentID == "")
    {
              // stop and throw an informative message to the user
    }else{
             // keep processing ...
    } 
}

初始加载完全正常,所以我可以从代码中清楚地设置属性。无论出于何种原因,虽然在jQuery更新标签的属性(点击一些点击等等)后,我无法在后面的代码中获取更新的属性值。任何有关此的提示或想法将不胜感激。

1 个答案:

答案 0 :(得分:3)

你要做的事情是行不通的,因为:

  1. 自定义属性的值不会发回服务器(如here所述)。

  2. 即使您在客户端代码中设置了Label的文本,它也无法在代码隐藏中的// find all groups var grps = $( ".radio-group" ); // next we try find a group with a radio that has no checked item var hasUnchecked = grps.filter(function(idx, el) { // if group has radio button that is checked, // we return false, else - return true return $( el ).find("input:checked")? false : true; }); // finally in hasUnchecked we have `.radio-group` // items with no checked radio found if (!hasUnchecked) { // groups with unchecked radio not found // submit a form } 属性中使用。 Label在页面中呈现为Text元素,并且该类型元素的内容不会发布回服务器。

  3. 本主题中提供了回发中包含的一个很好的属性列表:Which values browser collects as a postback data?

    正如mshsayem所建议的那样,你应该使用HiddenFields。如果由于某种原因,您希望以不同方式执行此操作,则可以使用隐藏的TextBox,在客户端代码中设置其span,并在代码隐藏中使用value属性检索它。换句话说:HiddenFields不是唯一可以在代码隐藏中检索客户端代码中设置的值的控件(但如果不显示控件,它们是显而易见的选择)。