ASP.NET隐藏字段的OnValueChange事件

3

我有几种不同的场景,它们都有不同的经纬度(和其他数据,但那不是重点),以JSON格式呈现。我已经成功解析了JSON,并能够获得所需的值。我想做的是将这些值传输到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
我认为当隐藏字段被渲染为隐藏输入时,它的ID不一定是latititudelongitude,除非您已经设置了静态ID模式。 - PSL
正如 @PSL 所提到的,由于 .Net 前缀了客户端 ID,因此您隐藏字段的 ID 在客户端可能会有所不同。 - Eonasdan
在您的 HiddenField 上设置 ClientIDMode="Static" 属性。参考链接:http://msdn.microsoft.com/zh-cn/library/system.web.ui.control.clientidmode(v=vs.110).aspx - jammykam
我尝试了ClientIDMode="Static",但没有任何不同的情况发生(我已经在valueChanged方法上添加了断点,但它从一开始就没有进入该方法)。 - Rachel F
1个回答

4
我将尝试解释这个问题。首先,客户端ID是基于NamingContainer父项生成的,因此,如果您的隐藏字段嵌套在容器中,则应使用ClientIDMode属性并将值设置为Static,以确保客户端ID在脚本中相同。
当控件引起postback时,ValueChange事件被触发。如果您放置了一个具有onclick事件的按钮,则会引起postack,并且ASP.Net生命周期开始执行隐藏输入的ValueChange事件。某些控件(如DropDownList)具有AutoPostBack属性,当将其设置为true时,它会在javascript更改事件发生后立即进行postack,因此它不会等待postback发生。HiddeField没有AutoPostBack属性,因此,如果您确实需要在更改值后进行postback,您可以进行postback操作。
function getScenarioDetails(json) {      
    $("#Welcome").text("Welcome user " + json.user);   
    $("#longitude").val(json.current_loc.lon);       
    __doPostBack('longitude', ''); 
    .....
}

这很有帮助。谢谢! - But I'm Not A Wrapper Class

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接