我使用HTML Helpers来呈现我的字段:
<%=Html.EditorFor(m => m.User.Surname)%>
输出结果如下所示:
<input class="text-box single-line" id="User_Surname"
name="User.Surname" type="text" value="" />
助手使用className +‘.èfieldName来构建id。
我需要将id传递给jQuery函数。有没有一种不用硬编码就能拥有它的方法呢?也许是一个可以使用ASP.NET MVC2约定的帮助器?
发布于 2011-01-29 23:19:28
我遵循了Mac的answer here的说明,并构建了自己的自定义扩展:
public static class HtmlHelperExtensions
{
public static string HtmlIdNameFor<TModel, TValue>(
this HtmlHelper<TModel> htmlHelper,
System.Linq.Expressions.Expression<Func<TModel, TValue>> expression)
{
return (GetHtmlIdNameFor(expression));
}
private static string GetHtmlIdNameFor<TModel, TValue>(Expression<Func<TModel, TValue>> expression)
{
if (expression.Body.NodeType == ExpressionType.Call)
{
var methodCallExpression = (MethodCallExpression)expression.Body;
string name = GetHtmlIdNameFor(methodCallExpression);
return name.Substring(expression.Parameters[0].Name.Length + 1).Replace('.', '_');
}
return expression.Body.ToString().Substring(expression.Parameters[0].Name.Length + 1).Replace('.', '_');
}
private static string GetHtmlIdNameFor(MethodCallExpression expression)
{
var methodCallExpression = expression.Object as MethodCallExpression;
if (methodCallExpression != null)
{
return GetHtmlIdNameFor(methodCallExpression);
}
return expression.Object.ToString();
}
}
我已经导入了应用程序的名称空间
<%@ Import Namespace="MvcApplication2" %>
最后我可以像这样使用我的代码:
<%=Html.HtmlIdNameFor(m=>m.Customer.Name)%>
发布于 2013-05-29 01:57:27
ASP.NET MVC4内置了Html.IdFor(),可以返回以下内容:
@Html.IdFor(m => m.User.Surname)
发布于 2011-08-18 16:53:06
看这个问题:get the generated clientid for a form field,这是我的答案:
我使用这个帮助器:
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)
https://stackoverflow.com/questions/4829193
复制相似问题