2011-03-24 37 views
15

是否有一种方法来获取客户端id生成的一个字段生成的一个html助手?获得表单字段的生成clientid

我有几个组件,有时在另一个窗体内,我不想将JavaScript事件附加到他们。

所以,对于样品,我想有:

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

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

接受的答案是过时的,看到我的答案解决方案更好 – 2015-12-16 11:12:23

回答

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)

+0

抱歉混合我的隐喻,像一个充满油的魅力 – coalvilledave 2012-11-16 13:09:24

+0

你从哪里得到'ExpressionHelper.GetExpressionText'? – mxmissile 2013-05-21 20:11:51

+0

它在System.Web.Mvc中 – 2013-05-22 07:35:40

5

你可以尝试在指定的HtmlAttributes参数的ID,当你产生输入字段,例如

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

然后你就可以在你的JavaScript中使用这个

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

如果您在同一页面中有多个组件实例,那么这将不起作用,而且如果您想要在目标操作中进行数据绑定,它也不会有用。 – Jokin 2011-03-24 15:04:27

+0

我知道这是一个旧的答案,但是...当使用MVC和Razor视图引擎时,您需要使用'@'符号示例转义id:'@ id =“emailTextBox”' – 2016-03-16 04:56:56

9

MVC 5有NameFor,所以你使用它的例子是:

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

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

编辑

IdFor也是可用的,这可能是在这种情况下比NameFor更合适。

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

相关问题