2010-03-24 2 views
7

Я loving ASP.NET MVC, не отставая от релизов/документов, иногда может быть сложной задачей, поэтому, возможно, я просто ничего не получаю ... Я хочу использовать TextBoxFor() и работа с LabelFor() и т. д. в порядке, все волшебство случается для меня.Ссылка на идентификатор элемента управления, созданный с помощью TextBoxFor()

Но если я создаю ...

<%=Html.TextBoxFor(x => x.LastName) %> 

И хотел сделать что-то хорошее с JQuery, как бы я получить идентификатор элемента управления, который был создан? Я мог бы добавить класс CSS и использовать, чтобы прикрепить мой JQuery, но что-то, что я делаю, я хотел бы идентификатор ... так что я мог бы сделать что-то вроде:

$('#LastName').(...) 

Я знаю, что я мог бы работать с ним в этот случай, и взломать его вручную, но есть ли более аккуратный способ?

+1

это не работает? Когда я пытаюсь это сделать, он, похоже, генерирует идентификатор, как я ожидал, его имя будет названо. Когда вы просматриваете источник HTML на странице, каков ваш вывод 'TextBoxFor()'? – Amadiere

+0

Это работает и генерирует идентификатор, который вы ожидаете, но я думаю, что если инфраструктура может работать для текстового поля, он сможет работать в других местах ... Особенно полезно при создании идентификатора к массиву, чтобы вы получили идентификатор типа «Websites_0__Url». Ручной способ работы, я просто думаю, что MVC должен знать это для меня и спасает меня от ошибок;) –

ответ

7

С MVC4 есть встроенный способ сделать это - @Html.IdFor().

Here is a sample использовать его:

@Html.IdFor(m => m.Filters.Occurred.From) 

и результат, как

Filters_Occurred_From 
12

Я думаю, что вы можете сделать что-то вроде:

<%=Html.TextBoxFor(x => x.LastName, new { id = "LastName" })%> 

Overloads of TextBoxFor

+0

Это будет работать в большинстве случаев, и я думаю, что у меня была связь между ID и Name слишком крепко в голове, конечно, я мог изменить его! Я думаю, что у него были бы проблемы, когда это был массив, в котором MVC разработал идентификаторы элементов управления, и вы закончили с и т. Д. –

+0

Другой способ сделать это - использовать MvcContrib, который вводит метод IdFor, который позволяет вам делать <% = this.IdFor (x => x.LastName)%>, что является волшебным! –

+0

Вместо генерации идентификаторов полей вручную я бы рекомендовал подход Колина или если вы не хотите зависеть от MVCContrib, тогда http://stackoverflow.com/questions/3065307/client-id-for-property-asp-net-mvc – JCallico

0

В качестве точки интереса представляется, что код Html.TextBox() будет генерировать идентификатор, дублируя имя элемента управления для чего-нибудь который начинается с буквы (az). Если, однако, ваше «имя» начинается с числа, это просто не беспокоит.

Это фантастическая «особенность», которая вызвала у меня горе в течение прошедшего часа или около того.

-1

По умолчанию ваш идентификатор управления является вашим значением привязки модели. Вы также можете использовать Firebug. выберите элемент управления и получите по умолчанию идентификатор элемента управления.

Смежные вопросы