Asp.Net 通过 JS/jQuery 动态更新的数据属性,但在通过代码隐藏检索时不会更新更新的属性



我有一个包含图像的aspx页面,当选中该页面时,会出现一个弹出窗口,提示输入各种信息tid位,然后我使用jQuery(即data-id="####"data-difficulty="###"等)将信息作为数据属性存储在隐藏标签上。我承认这不是最好的方法,但我尝试过其他方法(见下文),但都没有成功。

我一直在尝试检索动态更新的数据属性,但没有成功,这样各种项目就可以存储到我的本地ms-sql数据库中。属性的更新非常有效,因为我可以在Chrome的开发工具中查看正在正确更新的项目。尽管如此,当我尝试提取我可以看到正在更新的相同属性时,我无法在后面的代码中检索更新的值并不断获取初始值(通常是空字符串")。

以下是aspx页面上的实现:

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

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

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 ...
    } 
}

问题是,当我在调试模式下运行项目并检查这些元素时(再次确保我可以直观地看到这些属性实际上在开发人员工具中更新了),它们都是"的初始值。我唯一的猜测是存在某种后台问题,但在调用并完全处理我的方法之前,我不认为会发生这种情况。注意,我正在将图像填充到页面上,并通过基于项目id的sql调用更新它们的属性:

<img runat="server" src="" data-id="12345" />

最初的加载都非常完美,所以我可以很好地从代码后面清楚地设置属性。不过,无论出于什么原因,在jQuery更新标签的属性后,我都无法在代码后面的代码中获取更新的属性值(点击等等)。如有任何建议或想法,我们将不胜感激。

您试图做的事情无法工作,因为:

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

  2. 即使在客户端代码中设置了Label的文本,它在代码隐藏中的Text属性中也不可用。Label在页面中呈现为span元素,并且该类型元素的内容不会发布回服务器。

本主题提供了一个包含在回发中的属性列表:浏览器收集哪些值作为回发数据?

按照mshsayem的建议,您应该使用HiddenFields。如果出于某种原因,您想以不同的方式进行操作,可以使用隐藏的TextBoxes,在客户端代码中设置它们的value,并在代码隐藏中使用Text属性检索它。换句话说:HiddenFields并不是唯一可以在代码隐藏中检索客户端代码中设置的值的控件(但如果不显示控件,它们是显而易见的选择)。

最新更新