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

Я - begginer в asp.net mvc, и у меня есть сомнение:

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

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

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

Спасибо

Удачи

21
задан ekad 11 August 2016 в 12:32
поделиться

3 ответа

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

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 атрибутами, чтобы установить метку текст, причем ИМХО некрасивый. Я бы предпочел, чтобы этот материал появлялся в самой части представления ASPX, а не в какой-либо модели домена / представления. Однако некоторые люди не согласятся со мной.

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

38
ответ дан 29 November 2019 в 06:25
поделиться

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

Model.Name

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

-2
ответ дан 29 November 2019 в 06:25
поделиться

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

<%= Html.LabelFor(x => x.Name) %>
0
ответ дан 29 November 2019 в 06:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: