获取表单字段生成的clientid

时间:2011-03-24 12:13:10

标签: asp.net-mvc

有没有办法为使用html助手生成的字段生成客户端ID?

我有几个组件有时在另一个表单中,我不想将javascript事件附加到它们。

所以,对于样本,我想:

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

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

4 个答案:

答案 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