簡體   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