2009-12-24 81 views
1

Edit.aspx:驗證問題與MVC 1

<th>Calendar<input id="datepicker" name="datepicker" type="text" class="input-box"/></th> 

控制器動作:

// POST: /Studenti/Edit/5 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Edit(int[] rb, int id, string datepicker) 
    { 
     List<nastava_prisustvo> nastava = new List<nastava_prisustvo>(); 
     if (String.IsNullOrEmpty(datepicker)) 
      ModelState.AddModelError("datepicker", "First name is required"); 
     try 
     { 
      if (ModelState.IsValid) 
      { 
       string poruka = ""; 
       for (int i = 1; i <= rb.Length; i++) 
       { 
        string name = "chk" + i; 
        string selID = Request.Form[name]; 

        if (selID == "on") 
        { 

         nastava.Add(new nastava_prisustvo 
         { 
          br_indexa = int.Parse(Request.Form["id_stud" + i]), 
          id_predmet = id, 
          datum = System.DateTime.Parse(Request.Form["datepicker"]) 
         }); 
        } 
       } 
       return View("show", nastava); 
      } 
     } 
     catch(Exception ex){ 

      ModelState.AddModelError("*", "An unexpected error occurred."); 
     } 
     return View("show", nastava); 
     } 

    } 

如何驗證日期選擇器FIEL?如果日期未被選擇,如何停止發佈數據並顯示適當的消息。我使用ASP> NET MVC 1並閱讀這http://www.superexpert.com/Blog/archive/2008/09/09/asp-net-mvc-tip-42-use-the-validation-application-block.aspx,但沒有解決我的問題

回答

1

我會堅持服務器端驗證。試試這個:

DateTime datePosted; 
if (!DateTime.TryParse(Request.Form["datepicker"], out datePosted)) 
{ 
    this.ModelState.AddModelError("datepicker", "Invalid Date!"); 
} 

if (this.ModelState.IsValid) 
{ 
    return View("show", nastava); 
} 
else 
{ 
    // return your GET edit action here 
    return Edit(5); 
} 

你的編輯視圖會自動通過任何驗證錯誤,你可以顯示他們的驗證總結。

<%= Html.ValidationSummary() %> 
+0

如何在查看頁面上發佈此錯誤或此代碼自動添加頁面上的錯誤 – Ognjen

+0

我更新了我的代碼,但此代碼不會在用戶未設置日期時在查看頁面中寫入消息 – Ognjen

+0

我想通過擺脫try catch來重構您的方法使用TryParse方法來獲取和驗證int和日期值,並且在完成所有事情之後但在返回視圖之前僅檢查ModelState.IsValid。 –

1

如果你想驗證發佈之前的日期,你將不得不使用客戶端驗證。 xVal是一個很受歡迎的插件。

對於服務器端驗證,您將要查看模型綁定和模型驗證。

1

ASP.NET MVC不使用您在ASP.NET中使用的相同類型的控件。基本上你必須在JavaScript代碼中手工完成大部分事情,而在ASP.NET中它會自動生成代碼。

我會使用JQuery或其他來驗證按鈕單擊控件上的數據。

+0

什麼然後做數據標註校驗: http://www.superexpert.com/blog/archive/2008/09/10/asp-net-mvc-tip-43-use-data-annotation- validators.aspx – Ognjen

+0

我不會僅僅依靠Javascript來驗證你的日期。你也需要服務器端驗證。在MVC中有很多方法可以做到這一點。瑞恩B已經發布了1種方式。 – dtc

0

因爲你有驗證與自己的JavaScript客戶端上,嘗試了jQuery UI數據選擇器: http://jqueryui.com/demos/datepicker/

然後,最簡單地說,在服務器端,你可以把字符串值「日期選擇器」將它轉換在try/catch中。

var dtDatePicker = new DateTime(); 
try 
{ 
    dtDatePicker = Convert.ToDateTime(datepicker); 
    // worked, carry on 
} 
catch 
{ 
    // didn't work, invalid date. 
}