我有一个文本框,我只读它但想要回发它的值。之前我将代码设置为:
<asp:TextBox ID="textbox1" runat="server" ReadOnly="true">/asp:TextBox>
没用。我删除了ReadOnly="true"
,在代码中我添加了以下行
txtContractStartDate.Attributes.Add("readonly", "readonly");
为什么要开始回发数据?
答案 0 :(得分:3)
将ReadOnly
属性设置为true 包括 the attribute being set:
if (ReadOnly) {
writer.AddAttribute(HtmlTextWriterAttribute.ReadOnly, "readonly");
}
但是,该属性也会影响回发行为。它只会在not 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;
}
}
在这种情况下,控件也只会尝试to restore it:
protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection) {
// …
if (!ReadOnly && !current.Equals(postData, StringComparison.Ordinal)) {
Text = postData;
return true;
}
return false;
}
答案 1 :(得分:1)
来自MSDN论坛:
当你设置readonly属性时,asp.net知道你已经标记了 作为只读控制并改变控件的行为方式 - 它会 将readonly html属性添加到呈现的控件并赢得了 回发上的流程输入。当您通过属性.net执行此操作时 简单地将其视为属性,没有特殊的逻辑 导致.net到&#34;锻炼&#34;你添加的属性意味着它 应该改变控件的属性。基本上
txtdate.Attributes.Add("readonly", 'true');
与.net相比没有什么不同
txtdate.Attributes.Add("ABC", 'DEF');
您的属性代码会添加&#34; readonly&#34;属性所以它的行为就像 你期望在页面上,但因为.net ReadOnly属性没有 已设置,.net不会修改控件在回发时的行为方式。
类似的事情发生在文本框设置为密码模式。您可以 通过.Text设置任何你想要的东西,但文本框不会渲染值 因为.net改变了控件在其模式设置为时的行为方式 密码。您可以通过添加&#34;值&#34;来规避这一点。属性 这样,并设置&#34;值&#34;是密码。