Почему `decltype (static_cast (…))` не всегда `T`?

Вы можете передать префикс для частичного использования с помощью

@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")
20
задан Eric 5 October 2019 в 21:39
поделиться

1 ответ

Это трудно кодируется в определении 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 функционального типа не может появиться "в дикой природе". По сути, кастинг к тому типу, вероятно, имеет мало смысла.

20
ответ дан 29 November 2019 в 02:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: