В вашем представлении я не вижу ни текстового поля, ни поля, позволяющего отправлять данные на контроллер, только метку. Свойства не будут проверены, если они не опубликованы . Добавьте текстовое поле, оставьте его пустым, и ваша модель больше не будет действительной:
<%= Html.TextBoxFor(m => m.Customer.Name.Title)%>
UPDATE:
Вот код, который я использовал:
Модель:
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
});
}
}
Вид:
<%@ 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 возникали некоторые проблемы, когда у вас был префикс и переменная с одинаковым именем, но я не уверен, применимо ли это здесь, и думаю, что это исправлено.