所以,我有一个代码:
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
writer.AddAttribute("data-value", "{ \"test\": 3 }");
base.Render(writer);
}
我正在使用一个名为DataField的新类,它继承了HiddenField。这样做的整个目标是能够发送JSON对象,从客户端修改它,然后将其发布回服务器。所以,使用jQuery:
var data = $('#DataField').data('value');
data.test = 1;
$('#DataField').attr('data-value',JSON.stringify(data));
现在,从这里开始,如何从服务器获取data-value
属性回传?我知道整个页面都被贴回来了,所以,它应该在某个地方,不是吗?
覆盖LoadPostData
无效,因为其中包含的属性为value
而没有其他内容。
答案 0 :(得分:3)
我知道整个页面都被回发了,所以,它应该在某个地方,不是吗?
不。 “整页”未发布到服务器。表单值将发布到服务器。为了使服务器端代码(基本上DataField
的实例)接收值,需要将其设置为input type="hidden"
的值。 data-*
属性在客户端使用,它们不会作为表单的一部分发布到服务器。
所以当你这样做时:
$('#DataField').attr('data-value',JSON.stringify(data));
你也想要这样做:
$('#DataField').val(JSON.stringify(data));
这会将data
的JSON编码字符串设置为input type="hidden"
的值,该值将发布回服务器并在此处提供:
SomeDataField.Value