我的模型已正确验证。如果我在调试期间在验证结果中达到峰值,我会发现一切都是正确的。但是,所有我的验证结果都会显示,即使只有一个无效。同样,在调试期间,验证结果中只有一个字段正确显示,但是当我的视图呈现时,我们显示了所有字段:
[HttpPost]
public ActionResult Create(Widget widget)
{
if (widge.Valid)
{
// Save to db
}
retun View(widget);
}
我的观点:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" Inherits="System.Web.Mvc.ViewPage<Widget>" %>
// took out a lot of html here
<form action="Create" method="post">
<input name="Widget.City" value="<%= Model.City == null ? "" : Model.City%>" />
<%= Html.ValidationMessage("Widget.City")%>
<input name="Widget.Department" value="<%= Model.Department == null ? "" : Model.Department %>" />
<%= Html.ValidationMessage("Widget.Department")%>
<button type="submit">Save</button>
</form>
让我们说我的模型中的城市和部门设置为NotNull
,我正确地放入城市,但将部门留空。再次,它将显示它在控制器上无效,属性部门有问题,但在我看来,我将得到两个属性的“可能不为空”消息。如果我在视图中有4个属性和4个ValidationMessage标记,即使一个属性无效...所有4都将显示。这是什么交易?
答案 0 :(得分:0)
如果我没弄错,我想你想要使用
Html.ValidationMessageFor(model => model.City)
不是您目前在视图中使用的内容。
此外...由于您使用的是强类型视图,因此您应该检查ModelState.IsValid以确定是否应该保存Widget。也就是说,如果您在视图模型上使用数据注释。
答案 1 :(得分:0)
您使用什么作为视图的[HttpGet]
操作的输入?
由于您使用格式Widget.Property
,视图需要模型具有包含窗口小部件数据的窗口小部件属性..即它正在查找Model.Widget.Property
,但您的模型仅包含{{ 1}}。根据此处发布的代码,您只是将窗口小部件传递回视图,它会将其解释为具有NULL Model.Property
属性,从而触发所有NotNull验证。
此处的解决方案是将Widget post模型(您在Widget
操作中接受的内容)分配给您传递回视图的模型的Widget属性。
[HttpPost]
希望我能正确地表达出来......这是漫长的一天=)