繁体   English   中英

Asp.NET没有获得由javascript设置的自定义属性的更新值

[英]Asp.NET not getting updated values of custom attributes set by javascript

这个问题一直困扰着我,并解释为什么这会有所帮助。

鉴于以下DOM:

<body>
<form id="form1" runat="server">

    <div id="myDiv" runat="server" data-type="Monkey">
        Choose your inner animal!
        <ul>
            <li class="selected">Monkey</li>
            <li>Tiger</li>
            <li>Dog</li>
            <li>Bunny</li>
        </ul>
    </div>

    <asp:Button runat="server" ID="btnSubmit" Text="Submit" />

</form>
</body>
<script src="Assets/js/jquery-1.9.0.min.js" type="text/javascript"></script>
<script>
$(document).ready(function () {

    $('li').bind('click', function () {
        $('li.selected').removeClass('selected');
        var animal = $(this).addClass('selected').text();

        //$('#myDiv').data('type', animal);
        $('#myDiv').attr('data-type', animal);
    });

});
</script>

代码背后:

Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub btnSubmit_Click(sender As Object, e As System.EventArgs) Handles btnSubmit.Click
    Dim type As String = myDiv.Attributes("data-type")

    MsgBox(type)
End Sub
End Class

MsgBox 总是返回默认值'Monkey'。 现在我确实实现了一个解决方法,我将值存储在隐藏字段中,然后调用按钮单击的值,这是有效的。 我确实尝试过更新面板但没有运气,但这并不重要,因为我讨厌更新面板而且从不使用它们。

这是一个限制 - 如果你想称之为 - HTML和事情回发的方式。 据我所知,它甚至不是ASP.NET的限制:它超越了它。

只有某些标签将其值发布回服务器。 我认为它只是INPUT和SELECT标签,虽然可能有一个我没想到的。

标签中的属性甚至不会被回发:只是值。

因此服务器不知道您在客户端上更改了什么,除非它是在SELECT中选择的内容或INPUT的值。 ASP.NET中的所有内容,从ViewState和回发数据重建的所有内容都基于这些标记。

所以你隐藏的领域是你想要的唯一方式。

在SELECT的情况下,如果在JQuery中将“disabled”属性设置为true,那么在ASP .Net代码隐藏中,您将无法获得正确的值,而是将获得列表中的第一个项目作为selecteditem并且它是相应的值为选定值。 INPUT的情况也是如此。

我认为最简单的选择是使用隐藏字段,在JQuery中填充它们并在代码隐藏中使用它们的值。

另一个常见原因是,如果您在page_load函数中重建代码后面的下拉列表,而不检查它是否首先不是IsPostBack 这将导致您每次都将值重置为默认/第一项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM