Asp.net

ASP.NET 中是否有任何本地方式來執行“成功消息”?

  • December 19, 2008

假設您有類似 ASP.NET ASP:DetailsView 的東西來顯示和編輯數據庫中的單個記錄。

記錄錯誤情況很簡單……您添加驗證和驗證摘要。當您的更新表單驗證失敗時,它自然會產生噪音:它顯示驗證消息和/或驗證摘要。不需要後面的單個程式碼。

但是,您通過了驗證,它使您的更新完全靜默。沒有任何意義發生了任何事情,而且似乎沒有任何預設設置可以在沒有程式碼隱藏的情況下發出成功消息。

但是,即使是程式碼隱藏也令人困惑。什麼事件應該顯示成功消息?onItemUpdate,對吧?很好,但是假設您進行了另一項更改並收到驗證錯誤?您的成功資訊將保留。如果出現驗證錯誤,我無法找到能夠可靠地關閉現有成功消息的事件。

這應該是 Web 開發 101!為什麼這麼難?

編輯:

有人建議使用 ItemCommand 事件……我嘗試了這個和許多其他事件,但成功消息不會消失。這是一些程式碼。

我在 ASP.NET 中的消息

<label id="successMessage" class="successMessage" runat="server"></label>

還有我的 DataView 標籤(簡化):

   <asp:DetailsView 
       Id="EditClient"
       DataKeyNames="LicenseID" 
   DataSourceID="MySource"
   runat="server" 
       OnItemUpdated="SuccessfulClientUpdate"
       OnItemCommand="ClearMessages">

而且,我的程式碼隱藏:

protected void SuccessfulClientUpdate(object sender, DetailsViewUpdatedEventArgs e)
{
   successMessage.InnerText = string.Format("Your changes were saved.");
   successMessage.Visible = true;
}

protected void ClearMessages(object sender, DetailsViewCommandEventArgs e)
{
   successMessage.InnerText = string.Empty;
   successMessage.Visible = false;
}

但是,一旦我成功更新,似乎沒有什麼能讓該消息消失,甚至沒有驗證失敗。

第二次編輯:

只是想明確一點,我確實嘗試將 ClearMessages 程式碼放在 Page_Load 中。但是,當我第二次點擊更新並出現驗證錯誤時,似乎沒有什麼能讓 successMessage 標籤消失。任何人都可以建議任何其他故障排除技巧嗎?

據我所知,沒有本地方法可以做到這一點。你可能會抱怨它,也許微軟會聽到它:)。

在 Page_Load 或程式碼隱藏中的任何位置重置“成功消息”將不起作用。這是因為 ASP.NET 驗證通常在客戶端和伺服器端完成。這意味著對於您放置在頁面上的每個驗證控制項,ASP.NET 都會生成一些客戶端 Javascript,這些 Javascript 會執行驗證並在客戶端上呈現錯誤,而無需返回伺服器。因此,您同時遇到了成功消息和錯誤消息。

你可以做些什麼:

  • 在您的頁面上放置一個<div>控制項,這將顯示成功消息(正如上面其他人已經建議的那樣)。每當您更新某些內容(在伺服器端程式碼中)時,顯示控制項並設置一個有意義的“成功!” 消息文本。
  • <div>註冊一個自定義 Javascript 函式,該函式將在每個送出頁面時查找並隱藏它。請注意,需要在執行驗證的自動生成的客戶端腳本之前呼叫該函式。

如果您查看 ASP.NET 頁面的客戶端原始碼(上面帶有驗證器),您可以找到以下內容:

<form name="aspnetForm" method="post" action="MyPage.aspx" onsubmit="javascript:return WebForm_OnSubmit();id="aspnetForm">

WebForm_OnSubmit 由 ASP.NET 生成並呼叫執行驗證的 javascript。樣本:

function WebForm_OnSubmit() {
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false)
   return false;
return true;
}

要註冊隱藏成功消息的自定義程式碼,您應該按照以下方式放置(在您的程式碼隱藏中):

if (!Page.ClientScript.IsOnSubmitStatementRegistered("ClearMessage"))
{
   string script = @"document.getElementById('" + 
       yourDivControl.ClientID + "').style.display='none'";
   Page.ClientScript.RegisterOnSubmitStatement(Page.GetType(), "ClearMessage", script);
}

這會將您頁面的自動生成 WebForm_OnSubmit 變成以下內容:

function WebForm_OnSubmit() {
   document.getElementById('ctl00_yourDivControl').style.display='none';
   if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false)
       return false;
   return true;
}

效果:在每次回發時(例如,當 ItemCommand 被觸發時,或者當某些 Save 按鈕被點擊時,或其他任何事情時),您將顯示帶有“成功”消息的 div 控制項。在下一次回發時,就在將頁面送出到伺服器之前,此消息被清除。當然,如果這個回發也觸發了“成功”,那麼伺服器上的程式碼隱藏會再次顯示該消息。等等等等。

我希望以上內容有所幫助。這不是完整的解決方案,但它提供了足夠的提示來為您指明正確的方向。

引用自:https://stackoverflow.com/questions/361910