ASP.NET隐藏字段的OnValueChange

时间:2013-12-25 17:54:46

标签: javascript jquery asp.net

我有几种不同的场景,在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出现了问题,因为它没有触发。我究竟做错了什么?

1 个答案:

答案 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', ''); 
    .....
}