HtmlHelper<BlueUser>
과 다른 하나는 HtmlHelper<GreenUser>
으로 만들고 다른 동작에 게시하십시오.
먼저, 뷰 모델이다
가
@model ParentModel
이어서 서브 모델의 각각에 대한 html 헬퍼를 만들 HtmlHelperFor
을 사용
@{
var blueHtml = Html.HtmlHelperFor(Model.BlueUser);
var greenHtml = Html.HtmlHelperFor(Model.GreenUser);
}
@using (blueHtml.BeginForm("BluePost", null)) {
@blueHtml.EditorForModel()
}
@using (greenHtml.BeginForm("GreenPost", null)) {
@greenHtml.EditorForModel()
}
마지막으로, 제어부에서 각하는 가지 다른 포스트 액션을 만들 양식 :
[HttpPost]
public ActionResult BluePost(BlueUser model) {
...
}
[HttpPost]
public ActionResult GreenPost(GreenUser model) {
...
}
확장 방법은 다음과 같습니다.
public static class HtmlHelperFactoryExtensions {
public static HtmlHelper<TModel> HtmlHelperFor<TModel>(this HtmlHelper htmlHelper) {
return HtmlHelperFor(htmlHelper, default(TModel));
}
public static HtmlHelper<TModel> HtmlHelperFor<TModel>(this HtmlHelper htmlHelper, TModel model) {
return HtmlHelperFor(htmlHelper, model, null);
}
public static HtmlHelper<TModel> HtmlHelperFor<TModel>(this HtmlHelper htmlHelper, TModel model, string htmlFieldPrefix) {
var viewDataContainer = CreateViewDataContainer(htmlHelper.ViewData, model);
TemplateInfo templateInfo = viewDataContainer.ViewData.TemplateInfo;
if (!String.IsNullOrEmpty(htmlFieldPrefix))
templateInfo.HtmlFieldPrefix = templateInfo.GetFullHtmlFieldName(htmlFieldPrefix);
ViewContext viewContext = htmlHelper.ViewContext;
ViewContext newViewContext = new ViewContext(viewContext.Controller.ControllerContext, viewContext.View, viewDataContainer.ViewData, viewContext.TempData, viewContext.Writer);
return new HtmlHelper<TModel>(newViewContext, viewDataContainer, htmlHelper.RouteCollection);
}
static IViewDataContainer CreateViewDataContainer(ViewDataDictionary viewData, object model) {
var newViewData = new ViewDataDictionary(viewData) {
Model = model
};
newViewData.TemplateInfo = new TemplateInfo {
HtmlFieldPrefix = newViewData.TemplateInfo.HtmlFieldPrefix
};
return new ViewDataContainer {
ViewData = newViewData
};
}
class ViewDataContainer : IViewDataContainer {
public ViewDataDictionary ViewData { get; set; }
}
}
당신은 언제나 사용자 – YavgenyP
의 적절한 유형의 양식을 구축 할 수 있습니다하지만이 개 형태가 동일한 뷰에있을 ... 클라이언트가 원하는 방법 것은 이것이 가지고 있고 심지어 일러스트 레이터로 날을 제공 레이아웃. – Benjamin
그러면 질문을 수정하고 자세한 정보를 제공해야합니다. – YavgenyP