Как написать метод расширения HtmlHelper, который отображает частичное представление? - PullRequest
1 голос
/ 06 июля 2011

Мне нужно создать расширение HtmlHelper для рендеринга автозаполнения. Как то так:

@Html.AutoCompleteFor(x => x.CustomerId);

Проблема в том, что Html.RenderPartial(...) возвращает void, поэтому мой метод AutoCompleteFor также должен быть void. Но Razor не даст ему скомпилироваться, потому что @ Html.X скомпилируется только в том случае, если X возвращает объект.

Я знаю, что могу обойти эту проблему, позвонив вместо этого:

@{ Html.AutoCompleteFor(x => x.CustomerId); }

Но это сделает мой код несовместимым с @Html.EditorFor

Мне нужно вернуть PartialView изнутри моего HtmlHelper

Некоторые соображения:

  • Я знаю, вы могли бы подумать, что это каким-то образом нарушит схему MVC, но MVC сама делает это. Html.EditorFor попытается найти представление и вернуть его.
  • Я только пытаюсь это сделать, потому что мне нужно свойство foreign-key, чтобы использовать jQuery-AutoComplete по умолчанию. Я не смог сказать MVC использовать мой шаблон для свойств внешнего ключа.

1 Ответ

1 голос
/ 06 июля 2011

Вы должны вызвать Html.Partial, который возвращает объект HelperResult вместо записи непосредственно на страницу.
Затем вы можете вернуть HelperResult вызывающему абоненту.

Технически, вы могли бы просто return null, но это было бы действительно глупой идеей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...