【问题标题】:ASP.NET Hidden Field Not PostingASP.NET 隐藏字段未发布
【发布时间】: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


【解决方案1】:

检查这两个隐藏字段是否在页面表单内,并从开发者面板的网络选项卡中检查它们的值是否回发,如果您在回发功能中更改它们的值,它是否在客户端改变?

【讨论】:

    【解决方案2】:

    试试这个:

    var lat = $("#" + '<%= hvLatitude.ClientID %>');
    var lng = $("#" + '<%= hvLongitude.ClientID %>');
     ...
    

    【讨论】:

    • 我通常使用这样的 ClientID,但由于我没有任何运气,我尝试了 Static 选项。所以不幸的是,我已经走上了这条路。
    猜你喜欢
    • 1970-01-01
    • 2014-03-29
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多