Получить сгенерированный clientid для поля формы

Есть ли способ получить идентификатор клиента, сгенерированный для поля, сгенерированного с помощью html-помощника?

У меня есть несколько компонентов, которые иногда находятся внутри других форм, и я не хочу прикреплять к ним события javascript.

поэтому для образца я хотел бы иметь:

@Html.TextBoxFor(model => model.client.email)

<script> 
$('#@getmyusercontrolid(model=>model.client.email)').val("put your mail here");
</script>

Ответ 1

Я использую этот помощник:

public static partial class HtmlExtensions
{
    public static MvcHtmlString ClientIdFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
    {
        return MvcHtmlString.Create(htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression)));
    }
}

Используйте его так же, как и любой другой помощник: @Html.ClientIdFor(model=>model.client.email)

Ответ 2

MVC 5 имеет NameFor, поэтому ваш пример:

@Html.TextBoxFor(model => model.client.email)

<script> 
$('#@Html.NameFor(model => model.client.email)').val("put your mail here");
</script>

ИЗМЕНИТЬ

IdFor также может быть более подходящим в этой ситуации, чем NameFor.

Ответ 3

Вы можете попробовать указать идентификатор в аргументе HtmlAttributes, когда вы создаете поле ввода, например.

@Html.TextBoxFor(model => model.client.email, new { id = "emailTextBox" })

Затем вы можете использовать это в своем javaScript

var email = $('#emailTextBox').val();

Ответ 4

Используйте @Html.IdFor(model => model.client.email), поскольку эта функциональность уже существует следующим образом:

@Html.TextBoxFor(model => model.client.email)

<script> 
$('#@Html.IdFor(model => model.client.email)').val("put your mail here");
</script>

Подробнее об этом можно прочитать на следующей странице: https://msdn.microsoft.com/en-us/library/hh833709%28v=vs.118%29.aspx