2011-05-16 100 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