有没有办法为使用html助手生成的字段生成客户端ID?
我有几个组件有时在另一个表单中,我不想将javascript事件附加到它们。
所以,对于样本,我想:
@Html.TextBoxFor(model => model.client.email)
<script>
$('#@getmyusercontrolid(model=>model.client.email)').val("put your mail here");
</script>
答案 0 :(得分:31)
我使用这个助手:
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)
答案 1 :(得分:10)
MVC 5有NameFor,因此您使用它的示例是:
@Html.TextBoxFor(model => model.client.email)
<script>
$('#@Html.NameFor(model => model.client.email)').val("put your mail here");
</script>
修改强>
IdFor也可用,在这种情况下可能比NameFor
更合适。
答案 2 :(得分:5)
生成输入字段时,可以尝试在HtmlAttributes参数中指定id,例如
@Html.TextBoxFor(model => model.client.email, new { id = "emailTextBox" })
然后你可以在javaScript中使用它
var email = $('#emailTextBox').val();
答案 3 :(得分:5)
使用@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