2016-09-15 205 views
0

處理我的第一個ASP.NET MVC應用程序,並有一些表單驗證問題。Html.beginform驗證服務器端和客戶端端

我有我的模型:

public class InfoFormEmplModel 
{ 
    public int supID { get; set; } 
    public string description { get; set; } 

    public InfoFormEmplModel() {} 

} 

注意,這種模式並不代表在我DATABSE任何表。現在

,在我看來:

@using Portal.Models 
@model InfoFormEmplModel 
@{ 
    ViewBag.Title = "Form"; 
} 


@using (Html.BeginForm()) 
{ 
    <b>Sup</b> @Html.TextBoxFor(x => x.supID) 

    <p>Description</p> 
    @Html.TextAreaFor(x => x.description)<br><br> 

    <input type="submit" name="Save" value="Soumettre" /> 
} 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

我需要做一些驗證,該字段必須不能是空的,我也有檢查supId提供存在於我的數據庫(服務器端驗證)

我想一些驗證添加到我的模型:

public class InfoFormEmplModel 
    { 
     [Required (ErrorMessage = "Superior ID required")] 
     public int supID { get; set; } 

     [Required (ErrorMessage = "Description required")] 
     public string description { get; set; } 

     public InfoFormEmplModel() {}   
    } 

,並還增加了@ Html.ValidationMessageFor我的看法:

@using Portal.Models 
    @model InfoFormEmplModel 
    @{ 
     ViewBag.Title = "Form"; 
    } 


    @using (Html.BeginForm()) 
    { 
     <b>Sup</b> @Html.TextBoxFor(x => x.supID) 
     @Html.ValidationMessageFor(x => x.supID) 

     <p>Description</p> 
     @Html.TextAreaFor(x => x.description)<br><br> 
     @Html.ValidationMessageFor(x => x.description) 

     <input type="submit" name="Save" value="Soumettre" /> 
    } 

    @section Scripts { 
     @Scripts.Render("~/bundles/jqueryval") 
    } 

我的控制器看起來是這樣的:

[HttpPost] 
public PartialViewResult invform(InfoFormEmplModel form) 
    { 

     //check if supID exists 
     bool exists = librairie.supExists(form.supID); 
     if (!exists) 
     { 
      return PartialView("ErreurDuplicat"); 
     } 

     return PartialView("Success"); 
    } 

當我離開supID空,驗證似乎沒有occur..My控制器就向我的模型到檢查Superieur的標識是另一個類在數據庫中但supID沒有任何價值。我期待,在控制器進行之前,我會看到網頁上的錯誤消息..

此外,一旦我檢查如果supID存在數據庫中,我如何顯示錯誤消息在我的看法,所以用戶可以輸入一個有效的supID?

+0

您在視圖中使用的模型與您應用驗證的模型不同。它應該是'@model InfoFormulaireEmployeModele'。 – DCruz22

+0

糟糕,我糾正了這一點。我對代碼進行了一些修改,因此它更小,並且沒有一堆法語變量。 –

+0

但是,您確定這是您正在使用的代碼嗎?您的視圖和模型中的屬性命名方式不同。您只需將代碼添加到當前的模型,視圖和控制器中以避免混淆。 – DCruz22

回答

2

假設您始終使用相同的視圖模型(並且爲了清晰起見您進行了翻譯和縮短),您應該在後期操作中獲取視圖模型。然後,您可以使用ModelState屬性根據您的驗證註釋檢查接收到的模型是否有效。

如果你的模型是有效的,你的SupId做服務器端檢查,如果你想,如果這樣的ID已經存在,你可以做到這一點,如下面的代碼片段設置了一個錯誤:

[HttpPost] 
    public ActionResult invform(InfoFormEmplModel form) 
    { 
     if (ModelState.IsValid) 
     { 
      //set an error when the id exists  
      ModelState.AddModelError("supId", "The Id is already in use. Please chose a different Id"); 
      return View(form); 
     } 

     return View(form); 
    } 

對於其他錯誤是不可能的,你收到一個空id,因爲它是一個int。所以也許你錯過了別的東西?

希望這會有所幫助!

相關問題