【发布时间】:2017-07-14 01:56:44
【问题描述】:
我有一个基本的 Web 表单页面,它有两个隐藏字段,在从 Bing 地图接收结果后,它们的值在 jQuery 方法中设置。基本结构是这样的:
<asp:HiddenField runat="server" ID="hvLatitude" ClientIDMode="Static" />
<asp:HiddenField runat="server" ID="hvLongitude" ClientIDMode="Static" />
这里是设置隐藏字段的 Javascript(删除 Bing Maps 调用)的片段:
if (results.resourceSets[r].resources[re].geocodePoints[gp].usageTypes[u] == "Route") {
console.log('found it!');
var coords = results.resourceSets[r].resources[re].geocodePoints[gp].coordinates;
console.log(coords);
var lat = $("#hvLatitude");
var lng = $("#hvLongitude");
//make sure it only gets set once
if (lat.val().length == 0 || lng.val().length == 0) {
lat.val(coords[0]);
lng.val(coords[1]);
console.log('values set!');
}
}
当代码运行时,我的标准回发发生并且隐藏值不存在 - 我检查了字段本身并查看了 Request.Forms 内部,但它们是空字符串。试过ClientIDMode="Static" 和Auto 没有运气。最奇怪的是,如果我在控制台中执行$("#hvLatitude").val()(因为 Visual Studio 正在等待我从断点移动 a)并且值就在那里!这是我见过的最令人困惑的事情。
有什么建议吗?页面上没有 Javascript 错误,所以我现在完全不知所措。
【问题讨论】:
-
老实说没有任何意义。即使您在页面上禁用了视图状态,它仍会将值发送回服务器(无论如何一次)。在您设置它之后(在回发之前或之后),几乎必须有一些东西来清除它。该javascript代码是否多次运行?为什么要评论“确保它只设置一次”?
-
检查这两个隐藏字段是否在页面表单内,并从开发人员面板中的网络选项卡检查它们的值是否回发,如果您在回发功能中更改其值,它是否在客户端更改一边?
-
Annnd 已修复。新手错误 - 值是在异步运行的
$.ajax()调用中设置的,因此在页面回发之前没有设置值。 @kman - 添加您的评论作为答案,因为查看“网络”选项卡是让我意识到这一点的原因。感谢大家的快速帮助! -
我认为你的意思是@BasselEid - 他的评论提到了网络标签
标签: javascript c# jquery asp.net webforms