我有一些看似非常简单的东西不起作用。
我有一个模型
public class Name: Entity
{
[StringLength(10), Required]
public virtual string Title { get; set; }
}
public class Customer: Entity
{
public virtual Name Name { get; set; }
}
视图模型
public class CustomerViweModel
{
public Customer Customer { get; set; }
}
a view
<% using(Html.BeginForm()) { %>
<%= Html.LabelFor(m => m.Customer.Name.Title)%>
<%= Html.TextBoxFor(m => m.Customer.Name.Title)%>
<button type="submit">Submit</button>
<% } %>
和一个控制器
[HttpPost]
public ActionResult Index([Bind(Prefix = "Customer")] Customer customer)
{
if(ModelState.IsValid)
Save
else
return View();
}
无论我输入什么作为标题(空或大于 10 个字符的字符串),ModelState.IsValid 始终为 true。 Customer 对象中的 Title 字段有一个值,因此数据正在传递,但没有经过验证?
有什么线索吗?
在您的视图中,我没有看到任何文本框或允许将数据发送到控制器的字段,只有一个标签。属性将如果未发布,则不会被验证 http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html。添加一个文本框,将其留空,您的模型将不再有效:
<%= Html.TextBoxFor(m => m.Customer.Name.Title)%>
UPDATE:
这是我使用过的代码:
Model:
public class Name
{
[StringLength(10), Required]
public virtual string Title { get; set; }
}
public class Customer
{
public virtual Name Name { get; set; }
}
public class CustomerViewModel
{
public Customer Customer { get; set; }
}
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index([Bind(Prefix = "Customer")]Customer cs)
{
return View(new CustomerViewModel
{
Customer = cs
});
}
}
View:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyApp.Models.CustomerViewModel>" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<% using(Html.BeginForm()) { %>
<%= Html.LabelFor(m => m.Customer.Name.Title)%>
<%= Html.TextBoxFor(m => m.Customer.Name.Title)%>
<button type="submit">Submit</button>
<% } %>
</asp:Content>
当您提交此表单时,会显示验证错误。
备注1:我省略了Entity
模型中的基类,因为我不知道它看起来如何。
备注2:我已将 Index 操作中的变量重命名为cs
。我记得在 ASP.NET MVC 1.0 中,当前缀和变量命名相同时,会出现一些问题,但我不确定这是否适用于此,我认为它已修复。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)