簡體   English   中英

ASP.NET中的ReadOnly = true和TextBox1.Attributes.Add(“readonly”,“readonly”)有什么區別?

[英]What is the difference between ReadOnly=true and TextBox1.Attributes.Add(“readonly”, “readonly”) in ASP.NET?

我有一個文本框,我只讀它但想要回發它的值。 之前我將代碼設置為:

<asp:TextBox ID="textbox1" runat="server" ReadOnly="true">/asp:TextBox>

它不起作用。 我刪除了ReadOnly="true" ,在代碼中我放了以下一行

txtContractStartDate.Attributes.Add("readonly", "readonly");

為什么它開始回發數據?

ReadOnly屬性設置為true 包括 要設置的屬性

if (ReadOnly) {
    writer.AddAttribute(HtmlTextWriterAttribute.ReadOnly, "readonly");
}

但是,該屬性也會影響回發行為。 當它不是只讀時 (縮短原始代碼),它只會將文本保存在視圖狀態中:

private bool SaveTextViewState {
    get {
        if (TextMode == TextBoxMode.Password) {
            return false;
        }
        if (Events[EventTextChanged] != null || !IsEnabled || !Visible || (ReadOnly) || this.GetType() != typeof(TextBox)) {
            return true;
        }
        return false;
    }
}

在這種情況下,控件也只會嘗試恢復它

protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection) {
    // …

    if (!ReadOnly && !current.Equals(postData, StringComparison.Ordinal)) {
        Text = postData;
        return true;
    }
    return false;
}

來自MSDN論壇:

當您設置readonly屬性時,asp.net知道您已將控件標記為只讀並改變控件的行為方式 - 它將向呈現的控件添加readonly html屬性,並且不會在回發時處理輸入。 當您通過屬性執行此操作時,.net只是將其視為屬性,沒有特殊的邏輯導致.net“計算”您添加的屬性意味着它應該改變控件的屬性。 基本上

 txtdate.Attributes.Add("readonly", 'true'); 

與.net沒有什么不同

 txtdate.Attributes.Add("ABC", 'DEF'); 

您的屬性代碼添加了“readonly”屬性,因此它的行為與您在頁面上的預期相似,但由於尚未設置.net ReadOnly屬性,.net不會修改控件在回發時的行為方式。

將文本框設置為密碼模式時會發生類似情況。 您可以通過.Text設置任何所需的內容,但文本框不會將值呈現為.net會更改控件在其模式設置為“密碼”時的行為方式。 您可以通過以這種方式添加“value”屬性來規避這一點,並將“value”設置為密碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM