html.editorfor 没有生成 id,如何获取由ASP.NET MVC EditorFor生成的HTML ID

本文探讨了如何使用自定义的HtmlHelperExtensions扩展方法获取ASP.NET MVC中的字段ID,以便于在jQuery中动态引用。作者介绍了如何避免硬编码,以及如何通过`.ClientIdFor()`和自定义扩展来轻松管理ID。还讨论了如何使用特定的结束选择器技巧,以避免在jQuery选择器中硬编码元素ID。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我使用HTML助手来呈现我的字段:

m.User.Surname)%>

输出将是这样的:

name="User.Surname" type="text" value="" />

助手使用className +'。 èfieldName生成ID。

我需要将id传递给jQuery函数。 有没有办法不对其进行硬编码的方法?

也许可以使用ASP.NET MVC2约定的助手?

ASP.NET MVC 4具有内置的Html.IdFor()可以返回以下内容:

@Html.IdFor(m => m.User.Surname)

看到这个问题:获取表单字段的生成的clientid,这是我的答案:

我使用这个助手:

public static partial class HtmlExtensions

{

public static MvcHtmlString ClientIdFor(

this HtmlHelper htmlHelper,

Expression> expression)

{

return MvcHtmlString.Create(

htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(

ExpressionHelper.GetExpressionText(expression)));

}

}

就像使用其他任何助手一样使用它:@Html.ClientIdFor(model=>model.client.email)

根据我的回答,现在已使用Html.IdFor()将其内置到ASP.NET 4中

非常感谢,我需要那个。 html.IdFor()并没有帮助我,因为我正在制作自定义帮助程序,

我已按照Mac的回答说明进行操作,并构建了自己的自定义扩展程序:

public static class HtmlHelperExtensions

{

public static string HtmlIdNameFor(

this HtmlHelper htmlHelper,

System.Linq.Expressions.Expression> expression)

{

return (GetHtmlIdNameFor(expression));

}

private static string GetHtmlIdNameFor(Expression> 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();

}

}

我已经导入了我的应用程序的名称空间

最后,我可以这样使用我的代码:

m.Customer.Name)%>

值得注意的是,您需要使用System.Linq.Expressions;。 为此工作。 仍然是甜蜜的代码:)

我认为您还需要替换[&](如果您引用数组元素)

除非您创建自己的User.Surname EditorTemplate,并在其中传递一些HTML属性,否则您将无法使用EditorFor

但是,您可以使用TextBoxFor并设置ID

m.User.Surname, new { id ="myNewId" })%>

关于使用jQuery选择器检索此元素的主题,您可以通过使用一些end-with选择器来实现此目的而不必进行硬编码。使用它,您可能仍会使用EditorFor并仅通过$("[id^='Surname]")选择它。如果您尝试选择此特定元素,则实际上没有办法在您的jQuery代码中不进行硬编码。

添加HTML属性是最简单的方法。 比编写自己的扩展方法要容易得多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值