어떻게 구현하나요?asp.net mvc "간단한 양식"모델 상속
나는 다음과 같은 모델이 있습니다
class Something
{
public string Label { get; set; }
public DateTime Date1 { get; set; }
}
class SomethingStage2 : Something
{
public DateTime Date2 { get; set; }
}
class SomethingStage3 : SomethingStage2
{
public DateTime Date3 { get; set; }
}
그리고 다음 편집기 템플릿 :
EditorTemplates \ 뭔가를
<%@ Control Language="C#" Inherits="ViewUserControl<Something>" %>
<%= Html.Hidden("TypeName", Model.GetType()) %>
<%= Html.EditorFor(x => x.Label) %>
<%= Html.EditorFor(x => x.Date1) %>
EditorTemplates \ SomethingStage2
<%@ Control Language="C#" Inherits="ViewUserControl<SomethingStage2>" %>
<% Html.RenderPartial("EditorTemplates/Something.ascx" %>
<%= Html.EditorFor(x => x.Date2) %>
EditorTemplates \ SomethingStage3 업데이트
<%@ Control Language="C#" Inherits="ViewUserControl<SomethingStage3>" %>
<% Html.RenderPartial("EditorTemplates/SomethingStage2.ascx" %>
<%= Html.EditorFor(x => x.Date3) %>
, 나는 다음과 같은 컨트롤러 방법이 있습니다
public ActionResult Update(Something model);
기술적를, 아주 잘 작동합니다.
업데이트 : http://www.codinginstinct.com/2010/03/aspnet-mvc-and-convention-based-forms.html
public class CustomModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var typeName = bindingContext.ValueProvider.GetValue("TypeName");
var type = Type.GetType(reportFormTypeName.AttemptedValue);
var model = bindingContext.ModelMetadata.Model;
bindingContext.ModelMetadata = new ModelMetadata(ModelMetadataProviders.Current,
bindingContext.ModelMetadata.ContainerType,
() => model, type , bindingContext.ModelMetadata.PropertyName);
return base.BindModel(controllerContext, bindingContext);
}
}
이 업데이트 : Date3는 레이블 및 날짜 1 사이를 이동해야하는 경우,이 방법은의, 작동하지 않습니다 모델의 다른 서브 클래스를 처리하기 위해, 나는이 아이디어를 차용 한 코스. 그것이 단순한 형식을위한 것입니다. 그리고 큰 시간을 절약 할 수 있습니다.
이 방법은 정확한지, 편집 양식이 간단한 경우에 맞습니까?
이 방법을 사용하는 것이 "옳은"것인지 궁금합니다. 그렇지 않다면 어떻게 구현할 것입니까?
당신이 무엇을 의미합니까 (난 당신
Html.EditorFor
의 모든 조건에 누락 된 닫는 괄호를 믿고있어이 오타입니다) "맞습니까?" –당신 말이 맞아요,별로 의미하지는 않습니다. 지금 커뮤니티 위키에서 – mathieu