Вы можете передать префикс для частичного использования с помощью
@Html.Partial("MyPartialView", Model.ComplexModel,
new ViewDataDictionary { TemplateInfo = new TemplateInfo { HtmlFieldPrefix = "ComplexModel" }})
, который будет перенести префикс на ваш элемент управления атрибутом name
, чтобы <input name="Name" ../>
стал <input name="ComplexModel.Name" ../>
и правильно привязан к typeof MyViewModel
на обратной стороне
Изменить
Чтобы сделать это немного проще, вы можете инкапсулировать это в html-помощнике
public static MvcHtmlString PartialFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, string partialViewName)
{
string name = ExpressionHelper.GetExpressionText(expression);
object model = ModelMetadata.FromLambdaExpression(expression, helper.ViewData).Model;
var viewData = new ViewDataDictionary(helper.ViewData)
{
TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = name }
};
return helper.Partial(partialViewName, model, viewData);
}
и использовать его как
@Html.PartialFor(m => m.ComplexModel, "MyPartialView")