Как управлять идентификатором и именем html-элемента при использовании помощника EditorFor для MVC2 - PullRequest
2 голосов
/ 21 июня 2010

Я сейчас реорганизую рефакторинг своей кодовой базы MVC2, чтобы использовать подход ViewModel против.В результате модели, которые я передаю в мои представления для визуализации форм, теперь выглядят как

model.TheObject
model.TheCollectionOfOtherObjects

Я пытаюсь использовать помощник HTML.EditorFor для визуализации редактора шаблонов для типа данных.Раньше он работал, когда я пытался визуализировать TheObject непосредственно в представлении, теперь, когда есть уровень косвенности, я получаю совершенно другую схему именования объектов по умолчанию:

Например:

Перед рефакторингом в ViewModel я выводил специальный сборщик дат на основе JQuery:

<%: Html.EditorFor(model => model.StartDate, String.Format("{0:M/d/yyyy}", Model.StartDate))%> 

Вывод:

<input id="StartDate" name="StartDate" type="text" value="7/5/2010 11:10:25 AM" />            

На земле JQuery все было хорошо.

Затем я изменил представление, чтобы использовать ViewModel, который содержал TheObject, и изменил мой код EditorFor на следующий:

    <%: Html.EditorFor(model => model.TheObject.StartDate, String.Format("{0:M/d/yyyy}", Model.TheObject.StartDate))%> 

Теперь отображает следующий HTML-код:

    <input id="TheObject_StartDate" name="TheObject.StartDate" type="text" value="7/5/2010 11:10:25 AM" />    

Это, естественно,ломает мой JQuery на стороне клиента, и я предпочел бы иметь больший контроль над выводом атрибутов id и name в элементе html.

Любые идеи о том, как изменить это выражение лямбы, которое я передаю в EditorFor

Спасибо

Ответы [ 2 ]

1 голос
/ 21 июня 2010

Почему бы просто не использовать вместо этого селекторы CSS или сопоставлять идентификатор, а выглядеть в конце как $ ("input [id $ = 'StartDate']")?

Существует только так много, что вы можете контролироватьс этим подходом;может просто использовать Html.TextBox и не использовать синтаксис For.Это дает вам полный контроль ...

Подход TextBoxFor с идентификатором, который он дает, гарантирует, что любые публикации на сервере могут воссоздать след модели одного и того же типа объекта ...

НТН.

0 голосов
/ 21 октября 2010

Немного поздно, но для пользы других есть Html.IdFor (), который позволит вам получить сгенерированный идентификатор. Затем вы можете записать это в JavaScript для использования JQuery.

<%: Html.IdFor(model => model.TheObject.StartDate) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...