2010-07-26 191 views
2

打電話警告我有一個下拉列表和列表框都asp.net控制從代碼隱藏

我試圖阻止用戶duplciate項目添加到列表框控件

我能阻止它,但我想以顯示DIV或警報框說:「不允許複製姓名」

protected void btn_AddRecipientAction_OnClick(object sender, EventArgs e) 
     { 
      if (Convert.ToInt32(this.ddlRecipient.SelectedValue) > 0) 
      { 
       if (ddlRecipient.Text.Length > 0) 
       { 
        //var items = new System.Collections.ArrayList(this.lstRecipient.Items); 
        for(var i = lstRecipient.Items.Count - 1; i >= 0; --i) 
        {      
         if (lstRecipient.Items[i].Text == ddlRecipient.SelectedItem.Text) 
         { 
          lstRecipient.Items.RemoveAt(i); 
          **//alert("duplicate entry not allowed") 
          //div display the message and disappears after few seconds?** 
         } 
        } 
        ListItem newList = new ListItem(); 
        newList.Text = ddlRecipient.SelectedItem.Text; 
        newList.Value = ddlRecipient.SelectedValue; 
        this.lstRecipient.Items.Add(newList); 
       } 


      } 
     } 

回答

2

警報方式:

您可以使用該行假設你有一個ScriptManager

ScriptManager.RegisterClientScriptBlock(this,this.GetType(),"alert","alert('duplicate entry not allowed');",true); 

這一點,因爲當頁面被點擊後再次加載腳本運行但是仍然沒有回發。更好的解決方案是在提交頁面之前使用javascript在客戶端進行驗證。

+0

如何在提交頁面之前在客戶端進行驗證? – 2010-07-26 19:08:19

2

你想要的其實是兩件獨立的事情。

您應該在後面的代碼中進行驗證,檢查後發現的重複項。然後,使用一些JavaScript在客戶端上執行相同的檢查。

您必須檢查服務器上的重複項,因爲用戶可能沒有打開javascript。

2

哇!請不要在頁面中注入js以提醒用戶。您應該擁有一個通知控件,它可以接收像數組這樣的消息數據集,然後將消息顯示給用戶。你想分開你的顧慮。

你可以在js中實現。在服務器上,您可以在json中將數組設置爲隱藏字段,然後在js中的文檔就緒事件中讀取該json數據,解析數據並在數組上循環顯示消息。如果你必須使用警報來顯示它們,但你應該避免它,因爲它已經是20世紀90年代了。

但我會超越這一點。我在JavaScript到達服務器之前執行所有的處理和驗證。所以你不要依靠回帖來執行你的驗證。因此,只要用戶添加了該項目,就會被告知它是重複的。然後,一旦用戶填充了列表,他可以用ajax調用保存或發佈頁面,並在服務器上解析列表,驗證並保存它。如果您必須將列表與已經在服務器上保存的列表進行比較,那麼您可以在那裏執行此操作。 SOME的事情出錯了?您將消息添加到通知控件。

請考慮一下。嘗試使用像MVC這樣的框架來分隔您的擔憂。我讓鑽孔的速度更快,更容易維護。

+0

我同意你關於使用SOC,你能告訴我幾行代碼嗎? – 2010-07-26 19:41:30