模型中的验证未触发

时间:2015-01-08 17:12:12

标签: asp.net-mvc validation

让我疯狂......验证没有解雇。

当我将该字段留空并点击提交时,其行为就像模型有效一样。

我已经使用dbFirst实体框架来创建模型并在事后添加了所需的数据注释。

我的模特(实体)

public partial class Certificate
{
    public Certificate()
    {
        this.Travelers = new HashSet<Traveler>();
    }

    public int ID { get; set; }
    public System.DateTime InsertDate { get; set; }
    [Required(ErrorMessage = "Please enter your card number.")]
    public string CertificateNumber { get; set; }
    public Nullable<int> BuyerID { get; set; }
    public string Used { get; set; }
    public string Active { get; set; }

    public virtual ICollection<Traveler> Travelers { get; set; }
}

我的控制器:

    [HttpPost]
    public ActionResult Index(Certificate CertificateNumber)
    {
        if (ModelState.IsValid)
        {
            return RedirectToAction("Create", "Travelers");
        }
        return View(); 

    }

我的观点:

@model GrandCelebration.Models.Certificate
@{
    ViewBag.Title = "Validation";
}

<div>
    <h2>Please enter your card number below to validate</h2>
    <div id="searchbar">
        @using (Html.BeginForm())
        {@Html.ValidationSummary(true)
    <fieldset>
        @Html.TextBoxFor(model => model.CertificateNumber)
        <input type="submit" class="btn" alt="Validate" style="display:inline" value="Validate" />
        @Html.ValidationMessageFor(model => model.CertificateNumber)
        </fieldset>
        }
</div>
</div>

1 个答案:

答案 0 :(得分:0)

问题在于没有包含所需的js文件。

首先确保在Web.config中启用了不显眼的验证:

<appSettings>
  <add key="ClientValidationEnabled" value="true"/> 
  <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
</appSettings>

然后在_Layout页面中包含3个js文件:

<script src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.min.js"></script>
<script src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

成功启用客户端验证后,如果查看文本框HTML,您会看到已添加data-val属性。