Получить сгенерированный 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