我有一个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更新标签的属性(点击一些点击等等)后,我无法在后面的代码中获取更新的属性值。任何有关此的提示或想法将不胜感激。
答案 0 :(得分:3)
你要做的事情是行不通的,因为:
自定义属性的值不会发回服务器(如here所述)。
即使您在客户端代码中设置了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
元素,并且该类型元素的内容不会发布回服务器。
本主题中提供了回发中包含的一个很好的属性列表:Which values browser collects as a postback data?
正如mshsayem所建议的那样,你应该使用HiddenFields。如果由于某种原因,您希望以不同方式执行此操作,则可以使用隐藏的TextBox,在客户端代码中设置其span
,并在代码隐藏中使用value
属性检索它。换句话说:HiddenFields不是唯一可以在代码隐藏中检索客户端代码中设置的值的控件(但如果不显示控件,它们是显而易见的选择)。