Я граю з MVC3 за допомогою синтаксису Razer, хоча я вважаю, що проблема є більш загальною.
У контролері у мене є щось на кшталт:
ViewModel.User = New User(); // The model I want to display/edit
ViewModel.SomeOtherProperty = someOtherValue; // Hense why need dynamic
Return View();
Мій погляд успадковується від System.Web.Mvc.ViewPage
Але якщо я спробую зробити щось на кшталт:
<p>
@Html.LabelFor(x => x.User.Name
@Html.EditorFor(x => x.User.Name
</p>
Я отримую помилку: "Дерево виразів не може містити динамічну операцію"
Однак використання ViewPage видається досить поширеним, як і EditorFor / LabelFor. Тому я "буду здивований, якщо немає способу зробити це - оцінюйте будь-які вказівки.
Відповіді:
0 для відповіді № 1Здається, вираз дерева => http://msdn.microsoft.com/en-us/library/bb397951.aspx не повинні містити жодних динамічних змінних.
На жаль, це стосується TModel, коли ви використовуєте в ньому динаміку.
public static MvcHtmlString TextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func> expression
)
3 для відповіді № 2
Не використовуйте ViewPage<Dynamic>
. Я рекомендую вам використовувати модель перегляду та настійно ввести свій погляд у цю модель перегляду:
var model = new MyViewModel
{
User = new User
{
Name = "foo"
},
SomeOtherProperty = "bar"
};
return View(model);
а потім сильно введіть свій погляд ViewPage<MyViewModel>
і:
@Html.LabelFor(x => x.User.Name)
@Html.EditorFor(x => x.User.Name)
<div>@Model.SomeOtherProperty</div>