2015-02-09 61 views
2

加載頁面後(在ValidationSummary中)ASP.NET MVC驗證顯示錯誤,我想單擊「提交」按鈕後顯示它。我的代碼是:加載頁面後,ASP.NET MVC驗證顯示錯誤

佈局:

<html lang="en"> 
<head> 
    @Styles.Render("~/Content/css") 
    @RenderSection("head", required: false) 
    @Scripts.Render("~/bundles/modernizr") 
</head> 
<body> 
    @RenderBody() 

    @Scripts.Render("~/bundles/jquery") 
    @Scripts.Render("~/bundles/bootstrap") 
    @RenderSection("scripts", required: false) 
</body> 
</html> 

頁:

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary() 
.... 
} 

@section Head { 
    @Styles.Render("~/styles/jquery-ui-bootstrap-custom-theme") 
} 

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

包文件有:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
       "~/Scripts/jquery-{version}.js")); 

    bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
       "~/Scripts/jquery.validate*")); 

控制器:

 public ActionResult VacancyForm(int? ID, VacancyFormViewModel model) 
     { 
      VacancyFormViewModel model = new VacancyFormViewModel(); 
.... 
      return View(model); 
     } 
+1

您需要顯示您的控制器方法 – 2015-02-09 19:56:37

+0

已添加,但在控制器中有什麼意義? – 2015-02-09 20:24:10

+1

是GET還是POST方法? (如果它是GET,那麼這就是你的問題!) – 2015-02-09 20:25:36

回答

2

在GET方法中不應該有一個參數,它是一個複雜的對象(在你的案例中爲VacancyFormViewModel)。除了這個創建的醜陋查詢字符串之外;

  1. 如果模型中包含大量的屬性,或與 長值的屬性,它會超過查詢字符串限制並拋出一個異常 ;
  2. 如果模型包含的複雜對象或 集合屬性,然後結合會失敗(內部基於所述 屬性的ToString()值時產生 詞典路由值)

在你的情況下,該DefaultModelBinder初始化VacancyFormViewModel的新實例並設置其屬性的值(根據上述要點可能成功也可能不成功)。由於您在一個或多個屬性上具有驗證屬性,因此將這些錯誤添加到ModelState並因此顯示在窗體中。

如果該方法用於創建新的VacancyFormViewModel,那麼只需在方法中初始化模型的新實例。如果它用於編輯現有的VacancyFormViewModel,則傳遞ID作爲參數,並根據ID從存儲庫中獲取對象。