Вы можете передать префикс для частичного использования с помощью
@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")
Это трудно кодируется в определении static_cast
:
[expr.static.cast] (шахта акцента)
1 результатом выражения
static_cast<T>(v)
является результат преобразования выраженияv
к типуT
. , ЕслиT
lvalue ссылочный тип или rvalue ссылка на функциональный тип, результатом является lvalue; еслиT
rvalue ссылка на тип объекта, результатом является xvalue; иначе результатом является prvalue.static_cast
оператор не должен выбрасывать constness.
decltype
отношения категория значения его операнда, и производит lvalue ссылку для lvalue выражений.
обоснование может произойти из-за самих имен функций, всегда являющихся lvalues, и таким образом, rvalue функционального типа не может появиться "в дикой природе". По сути, кастинг к тому типу, вероятно, имеет мало смысла.