내 모델은 인터페이스에서 상속 :ASP.NET 모델 바인더 및 기본 유형
public interface IGrid
{
ISearchExpression Search { get; set; }
.
.
}
public interface ISearchExpression
{
IRelationPredicateBucket Get();
}
모델 :
public class Project : IGrid
{
public ISearchExpression Search { get; set; }
public Project()
{
this.Search = new ProjectSearch();
}
}
ProjectSearch :
public class ProjectSearch: ISearchExpression
{
public string Name { get; set; }
public string Number { get; set; }
public IRelationPredicateBucket Get()
{...}
}
그리고 강한 입력 된 partialview 주요보기 :
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ProjectSearch>" %>
<%= Html.TextBoxFor(x=>x.Name)%>
<%= Html.TextBoxFor(x => x.Number)%>
....
양식을 제출하면 Search
속성이 제대로 바인딩되지 않습니다. 모든 것은 비어 있습니다. 액션에는 ProjectSearch
유형의 인수가 필요합니다.
Search
이 예상대로 연결되지 않는 이유는 무엇입니까?
편집
액션 당신은 하위 유형을 결합하기 위해 올바른 접두사를 지정해야
public virtual ActionResult List(Project gridModel)
{..}
나는 양쪽 방법을 시도했다, niether는 일했다. 검색 유형 속성의 기본 유형과 관련이 있다고 생각합니다. 그것의 ISearchExpression. 바인딩이 발생하는 동안 Search가 ISearchExpression 유형이므로 모델 바인더가 Name 속성을 가질 수 없습니다. 이게 말이 되니? – user137348
게시 할 작업에 대한 코드를 표시 할 수 있습니까? –
게시물을 편집하고 액션 코드를 추가했습니다. – user137348