2010-04-17 4 views
1

겉으로보기에는 매우 간단하지 않은 무언가가 있습니다.ModelState는 항상 유효합니다.

내가 모델

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; } 
} 
을 가지고

 <% 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(); 
} 
,536,

제목 (null 또는 10 자보다 큰 문자열)으로 입력 한 내용에 관계없이 ModelState.IsValid는 항상 true입니다. Customer 객체의 Title 필드에는 값이 있으므로 데이터가 전달되고 있지만 유효성이 검사되지는 않습니까?

실마리가 있습니까?

답변

0

알아 두어야 할 것은 3.5 대신 System.ComponentModel.DataAnnotations 3.6을 참조했기 때문입니다. 제가 수집 한 것에서 3.6은 WCF RIA 서비스만을위한 것입니다.

5

보기에는 컨트롤러에 데이터를 보낼 수있는 텍스트 상자 나 필드가 표시되지 않고 레이블 만 표시됩니다. 속성은 not be validated if they are not posted입니다. , 텍스트 상자를 추가 비워두고 모델이 유효하지 않습니다 더 이상 :

<%= 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 : 색인 작업의 변수 이름을 cs으로 변경했습니다. ASP.NET MVC 1.0에서는 접두어와 변수가 같을지라도이 문제가 있었지만 여기에 해당되는지 여부는 확실하지 않아 수정되었다고 생각합니다.

+0

보기에 좋지 않습니다.보기에 텍스트 상자가 있습니다. –

+0

글쎄, 난 그냥이 예제를 시도하고 예상대로 작동, 유효성 검사 오류가 제목 속성에 표시되었습니다. –

관련 문제