簡體   English   中英

如何防止文本框的內容不在IE上使用C#asp.net上的xml進行編輯

[英]How can I prevent a textbox's content from being edited NOT on IE, with xml on C# asp.NET

我在與日歷擴展程序一起使用的頁面上遇到的文本框遇到一些嚴重問題,如下所示:

<asp:TextBox ID="fnTB" runat="server" ReadOnly="True"></asp:TextBox>
<asp:CalendarExtender ID="TextBox1_CalendarExtender" runat="server" 
                    Enabled="True" TargetControlID="fnTB" DefaultView="Years"></asp:CalendarExtender>

現在,問題是由“ ReadOnly”屬性引起的。 由於我的業務邏輯對日期進行了一些驗證,因此對日期的格式非常嚴格,因此我將文本框設置為只讀,以防止用戶弄亂日期的格式。 問題在於,現在將此屬性設置為truetextbox.Text屬性一直都設置為""

根據我在Microsoft論壇上發現的有關此屬性的信息,它說

服務器不處理只讀文本框。 這樣可以防止惡意用戶更改只讀的Text值。 除非通過服務器端代碼進行修改,否則Text屬性的值將在回發之間的視圖狀態中保留。

然后他們建議改為使用contentEditable屬性。 問題在於此屬性僅在IE瀏覽器上有效,這不是我們所需要的,因為用戶必須能夠從任何瀏覽器訪問該網站。

所以我想知道是否有一種方法可以不使用此屬性。

在此先感謝您的幫助!

如果您確實希望只讀字段通過綁定公開數據,則建議您使用Label來描述或表示另一個控件。

<asp:Label ID="fnTB" runat="server"></asp:Label>

另外,如果您只需要顯示無法編輯的文本,則可以使用帶文字的范圍。

<span class="foo"><asp:Literal id="fnTB" runa="server" /></span>

答案是不要使該字段為只讀,而是允許對其進行編輯並添加適當的驗證以確保其格式正確。

稍微擴展一下,將UI控件設置為只讀或禁用仍不會阻止確定的人( 咳嗽,螢火蟲咳嗽 )更改內容。 您遇到了上面提到的問題。

輸入應始終經過驗證,無例外。

您可以添加OnTextChanged事件。

<asp:TextBox ID="fnTB" runat="server" OnTextChanged="TextBox1_TextChanged"></asp:TextBox>

當您計划設置該值時,可以禁用該事件。 在事件處理程序中,您可以忽略任何更改,因此文本框實質上是只讀的。

protected void TextBox1_TextChanged(object sender, EventArgs e)
{
   e.Handled = true;    // Ignore any input.
}

最簡單的答案是Enabled='false'

<asp:TextBox ID="fnTB" runat="server" Enabled="false" />

這將以以下方式呈現控件:

<input name="fnTB" type="text" id="fnTB" disabled="disabled" class="aspNetDisabled">

您仍然可以為其分配值並在回發時檢索值,但用戶將無法在該字段中鍵入內容。 但是,當然,您仍然需要考慮這一點對安全的影響(即,其價值很容易通過檢查器/螢火蟲之類的方法來更改)。

暫無
暫無

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

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