EditorFor + TModel - PullRequest
       36

EditorFor + TModel

1 голос
/ 15 мая 2011

подпись для этого очень полезного метода утверждает, что я могу указать тип:

public static MvcHtmlString EditorFor<TModel, TValue>(
    this HtmlHelper<TModel> html,
    Expression<Func<TModel, TValue>> expression
)

... в документах вполне понятно, что TModel "Тип модели" . Должно быть, моя особая склонность заключается в том, что это описание не несет для меня никакого смысла. Я гуглил для объяснения, но нашел пшик.

Я нахожусь в представлении, где @model Website.Models.Product, но хочу создать редактор для чего-то другого типа. Я думал, что смогу:

@Html.EditorFor(@ViewBag.AClassOfTheOtherType)

или, может быть (я явно догадываюсь):

@Html.EditorFor(TheOtherType)

но это неприемлемый синтаксис, и я подумал:

@Html.EditorFor(x => x...)

но лямбда-выражение, похоже, связано с @model ... поэтому я подумал: "ах!":

@Html.EditoFor<TheOtherType>(...)

но VS считает, что <запускает HTML-тег и указывает на завершение моего вызова EditorFor (который не выполняется). </p>

aaaaahhhhh!

как мне это сделать (если мне действительно нужно спросить)?

Ответы [ 3 ]

2 голосов
/ 16 мая 2011

Не проверял, но не мог:

@Html.EditorFor(x => ViewBag.AClassOfTheOtherType)

Вам не обязательно использовать переменную, переданную в лямбду.

0 голосов
/ 22 мая 2011

ответ (барабанная дробь, пожалуйста) ... да, можно связать лямбда-выражение с помощью объявления типа.единственная проблема - редактор Visual Studio, который думает, что кто-то заканчивает часть C # и вводит часть HTML с открытием <и, таким образом, запрещает правильный код.Решение: </p>

@{ Html.EditoFor<TheOtherType>(...) }
0 голосов
/ 16 мая 2011

Модель - это Модель - M в MVC

TModel также может быть sdserweJJG - он только последовательно называется TModel вне соглашения.см. что-то вроде:

 TValue val = expression.Compile()(htmlHelper.ViewData.Model);

, где метод расширения компилирует переданную лямбду - например, часть x=>x.Model.Property - и возвращает фактические данные модели, которые используются для построения фактических элементов управления отображением.1009 *

Модель передается в представление, когда вы вызываете return View(viewModel); из действия вашего контроллера.

То, что вы пытаетесь сделать, не имеет смысла, потому что метод был разработан для работы с представлениямиМодель.

Однако вы можете использовать @Html.Editor, так как это примет действительное значение так, как вы пытаетесь:

@Html.Editor(ViewBag.AClassOfTheOtherType)

Исходный код для MVC свободно доступен для скачивания и просмотра -на это стоит потратить время:)

...