Подтвердить что ты не робот

Идентификатор клиента для свойства (ASP.Net MVC)

Я начинаю в asp.net mvc, и у меня есть сомнения:

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

<label for="<%=x.Name.ClientId%>"> Name: </label>
<%=Html.TextBoxFor(x=>x.Name) %>

Что мне нужно включить в "ClientId", чтобы убедиться, что правильный идентификатор будет отображаться соответствующему элементу управления?

Спасибо

Приветствия

4b9b3361

Ответ 1

Поместите этот код где-нибудь:

using System; 
using System.Linq.Expressions; 
using System.Web.Mvc; 

namespace MvcLibrary.Extensions 
{ 
    public static class HtmlExtensions 
    { 
        public static MvcHtmlString FieldIdFor<TModel, TValue>(this HtmlHelper<TModel> html,
            Expression<Func<TModel, TValue>> expression) 
        { 
            string htmlFieldName = ExpressionHelper.GetExpressionText(expression); 
            string inputFieldId = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName); 
            return MvcHtmlString.Create(inputFieldId); 
        } 
    } 
}

Затем в вашем представлении ASPX:

<label for="<%= Html.FieldIdFor(m => m.EmailAddress) %>">E-mail address:</label> 
<%= Html.TextBoxFor(m => m.EmailAddress) %>

Вы также можете использовать это в JavaScript-вызовах, так как вы не будете знать идентификатор элемента управления заранее и, возможно, нуждаетесь в этом, чтобы какой-то JavaScript-код работал против него:

<script> $.CoolJQueryFunction('<%= Html.FieldIdFor(m => m.EmailAddress) %>'); </script>

Метод меток LabelFor HTML, который упоминается здесь, не позволит вам указать фактическую текстовую метку, которую вы хотите использовать, вы должны украсить свои ViewModels атрибутами, чтобы установить текст ярлыка, при этом IMHO является уродливым. Я предпочел бы, чтобы материал отображался в самой части представления ASPX, а не на некоторой модели домена/вида. Некоторые люди не согласятся со мной, хотя.

Не уверен в правилах размещения ссылок на сообщения одного блога, но я разместил блог по этой точной теме: http://www.dominicpettifer.co.uk/Blog/37/strongly-typed--label--elements-in-asp-net-mvc-2 p >

Ответ 2

MVC 4 теперь встроен в это приложение.. см. this

Ответ 3

Его весело, что можно найти в бесплатном исходном коде MVC. Вот ответ:

@Html.IdFor или @Html.NameFor

Так в чем же разница? Вот улов:

NameFor не заменит никаких "." на "_".

Если вам нужен любой пример, я нашел эту классную маленькую статью

Ответ 4

Как уже было сказано, вам не нужно беспокоиться о ClientID, UniqueID и т.д. в ASP.NET MVC, поскольку это абстракции веб-форм. Вы можете просто просто написать идентификатор, который вы хотите. Для этого существует также метод расширения:

<%= Html.LabelFor(x => x.Name) %>

Ответ 5

Используйте следующее:

Model.Name

Вы можете просто создать "источник просмотра" или просмотреть обработанное текстовое поле с чем-то вроде Firebug, чтобы узнать, что генерируют методы Html.xyzFor(). Обычно они генерируют текстовое поле с атрибутами "id" и "name", которые установлены как имя свойства.