2011-05-16 101 views
5

我有以下視圖模型:ASP.NET MVC3驗證問題

public class Bulletin1ViewModel 
    { 
     [Required] 
     public String NumberDelegations { get; set; } 

     [Required] 
     public String TravelPlans { get; set; } 
    } 

,我想在我看來,使用方法:

 @using ErasProject.Models 
     @model ErasProject.Models.Bulletin1ViewModel 
<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

     @using (Html.BeginForm()) 
     { 
      @Html.ValidationSummary(true) 

      <fieldset> 

      <p> 
      @Html.EditorFor(model => model.NumberDelegations) 
      @Html.ValidationMessageFor(model => model.NumberDelegations) 
      </p> 

      <p> 
      @Html.EditorFor(model => model.TravelPlans) 
      @Html.ValidationMessageFor(model => model.TravelPlans) 
      </p> 

      <p> 
      <input type="submit" value="Submit" /> 
      </p> 

      </fieldset> 

    } 

但我的驗證不會被觸發。無論是客戶端還是服務器端。任何人都可以知道爲什麼?謝謝。

回答

5

你需要添加兩個jQuery和jQuery驗證插件(和可選的不顯眼庫)

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"   type="text/javascript"></script> 
<script src="http://ajax.microsoft.com/ajax/jQuery.Validate/1.7/jQuery.Validate.min.js" type="text/javascript"></script> 
<script src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.min.js" type="text/javascript"></script> 

所以,您認爲會像:

@using ErasProject.Models 
@model ErasProject.Models.Bulletin1ViewModel 

<script src="jquery.min.js"></script> 
<script src="jQuery.Validate.min.js"></script> 
<script src="jquery.validate.unobtrusive.min.js"></script> 

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 

    <fieldset> 

    <p> 
    @Html.EditorFor(model => model.NumberDelegations) 
    @Html.ValidationMessageFor(model => model.NumberDelegations) 
    </p> 

    <p> 
    @Html.EditorFor(model => model.TravelPlans) 
    @Html.ValidationMessageFor(model => model.TravelPlans) 
    </p> 

    <p> 
    <input type="submit" value="Submit" /> 
    </p> 

    </fieldset> 

} 

剛剛加入您的對象,並創建了一個Add行動,如:

public ActionResult Add() 
{ 
    return View(); 
} 

創造使用Create模板和Bulletin1ViewModel類看起來像這樣的一個觀點:

@model WebApp_MVC3.Models.Bulletin1ViewModel 

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

<h2>Add</h2> 

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>Bulletin1ViewModel</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.NumberDelegations) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.NumberDelegations) 
      @Html.ValidationMessageFor(model => model.NumberDelegations) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.TravelPlans) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.TravelPlans) 
      @Html.ValidationMessageFor(model => model.TravelPlans) 
     </div> 

     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 
} 

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

沒有做任何事情更多,其結果是:

original file

enter image description here

我將重新檢查JavaScript庫...

+0

他們已經加入。這是一個帶有RazorView引擎的MVC3應用程序。我已經檢查他們確實在場。 – Hanz 2011-05-16 11:05:45

+0

當你看到你的頁面源時它們會正確加載?你建立了嗎? – balexandre 2011-05-16 11:08:18

+0

我忘了補充他們在我的職位,但他們在那裏,它仍然沒有工作... – Hanz 2011-05-16 11:09:58

1

不要使用

<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script> 

,但你也可以把你的腳本刪除以下.js文件夾中的項目:

jquery-1.4.4.min.js 
jquery.validate.min.js 
jquery.validate.unobtrusive.min.js 

,將確保對js文件的引用是否正確。

+0

使用Web Platform Installer或使用Power Shell進行更新... jQuery已經在版本1.6.1中:) – balexandre 2011-05-16 11:19:04