我有几种不同的场景,在JSON中都有不同的经度和纬度(以及其他数据,但这不是重点)。我正在解析JSON ok,并且能够获得所需的值。我想要做的是将这些值传递给CodeBehind。 到目前为止我所做的是这样的事情:
这是负责任的剧本:
function getScenarioDetails(json) {
$("#Welcome").text("Welcome user " + json.user);
$("#longitude").val(json.current_loc.lon).change();
$("#latitude").val(json.current_loc.lat).change();
}
这些是隐藏的领域:
<form runat="server">
<asp:HiddenField runat="server" id="longitude" OnValueChanged="valueChanged" />
<asp:HiddenField runat="server" id="latitude" OnValueChanged="valueChanged" />
</form>
我意识到价值正在改变。但OnValueChanged出现了问题,因为它没有触发。我究竟做错了什么?
答案 0 :(得分:4)
我将尝试解释这一点,首先,客户端ID是基于NamingContainer父项生成的,因此如果您的隐藏字段嵌套在容器中,则应使用属性ClientIDMode并将值设置为Static以确保客户端ID为在你的剧本中也一样。
当一个控件导致回发时会触发ValueChange事件,所以如果你把一个带有onclick事件的按钮导致一个postack并且ASP.Net生命周期开始为你的隐藏输入执行ValueChange事件,一些控件如DropDownList有一个属性AutoPostBack,当它设置为true时,它会在javascript更改事件发生后立即进行回发,因此它不会等到发生回发。 HiddeField没有AutoPostBack属性,所以如果你真的需要在更改值后进行postack,你可以进行回发:
function getScenarioDetails(json) {
$("#Welcome").text("Welcome user " + json.user);
$("#longitude").val(json.current_loc.lon);
__doPostBack('longitude', '');
.....
}