C# 在MVC3中,控制器如何知道不引人注目的验证结果?
我使用的是C# 在MVC3中,控制器如何知道不引人注目的验证结果?,c#,asp.net-mvc-3,validation,controller,C#,Asp.net Mvc 3,Validation,Controller,我使用的是C,MVC3和VS2010 我注意到,即使valdiation结果为false,controller方法仍然会被执行。这使得验证在服务器端毫无用处。除非有办法得到结果 ----编辑--- 下面是我如何使用它。做得好吗?至少会显示验证消息,文本框变为红色 型号: public class CategoriaModel { [Required(ErrorMessage="Nome é obrigatório!")] [StringLength(10, ErrorMessag
C
,MVC3
和VS2010
我注意到,即使valdiation结果为false,controller方法仍然会被执行。这使得验证在服务器端毫无用处。除非有办法得到结果
----编辑---下面是我如何使用它。做得好吗?至少会显示验证消息,文本框变为红色 型号:
public class CategoriaModel
{
[Required(ErrorMessage="Nome é obrigatório!")]
[StringLength(10, ErrorMessage = "First Name max length is 10")]
public string Nome { get; set; }
}
视图:
测试
ModelState.IsValid
属性,但是如果客户端验证失败,则不应调用该操作。检查是否确实在验证所有模型属性。测试ModelState.IsValid
属性,但是如果客户端验证失败,则不应调用该操作。检查您是否真的在验证所有模型属性。嗯,很奇怪。顺便说一句,要跟踪它,您只需在控制器中添加一个断点。观察ModelState对象,查看两个集合(键、值),找出谁是无效模型的罪魁祸首。测试ModelState.IsValid将阻止您的代码执行,但是如果您能理解表单仍然提交的原因,那就太好了。ModelState.IsValid为false。好的,测试它会像你说的那样解决我的问题,但是如果它能正常工作就好了。好的,现在你有了一个修复程序,为了了解谁出了错,检查ModelState.Keys和ModelState.Values集合,应该有一个属性项对模型进行invelidating。如果这样做,我可以知道哪些属性是无效的。在我的例子中,只有一个属性,所以这是不必要的(尽管如此,我还是这样做了,没有什么意外)。你知道为什么当客户端验证失败时控制器仍然被调用吗?一切似乎都是正确的。我正在使用默认的MVC3项目(带有登录和用户创建的项目)进行验证,如果客户端验证失败,则不会提交表单。我看到的代码和示例之间的唯一区别是jquery.unobtrusive-ajax.js包含。尝试删除它或在其他验证之后移动。嗯,非常奇怪。顺便说一句,要跟踪它,您只需在控制器中添加一个断点。观察ModelState对象,查看两个集合(键、值),找出谁是无效模型的罪魁祸首。测试ModelState.IsValid将阻止您的代码执行,但是如果您能理解表单仍然提交的原因,那就太好了。ModelState.IsValid为false。好的,测试它会像你说的那样解决我的问题,但是如果它能正常工作就好了。好的,现在你有了一个修复程序,为了了解谁出了错,检查ModelState.Keys和ModelState.Values集合,应该有一个属性项对模型进行invelidating。如果这样做,我可以知道哪些属性是无效的。在我的例子中,只有一个属性,所以这是不必要的(尽管如此,我还是这样做了,没有什么意外)。你知道为什么当客户端验证失败时控制器仍然被调用吗?一切似乎都是正确的。我正在使用默认的MVC3项目(带有登录和用户创建的项目)进行验证,如果客户端验证失败,则不会提交表单。我看到的代码和示例之间的唯一区别是jquery.unobtrusive-ajax.js包含。尝试将其删除或在其他验证后移动。
@Html.ValidationSummary(true)
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.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("Salvar", "Test", FormMethod.Post))
{
@Html.LabelFor(m => m.Nome)
@Html.EditorFor(m => m.Nome)
@Html.ValidationMessageFor(m=>m.Nome)
<input type="submit" value="Salvar" />
}
public ActionResult Salvar(CategoriaModel catModel)
{
ViewBag.StatusMessage = "Ok!";
return View("Index");
}