首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何获取asp.net MVC EditorFor生成的HTML

如何获取asp.net MVC EditorFor生成的HTML
EN

Stack Overflow用户
提问于 2011-01-28 22:16:41
回答 3查看 45.3K关注 0票数 64

我使用HTML Helpers来呈现我的字段:

代码语言:javascript
复制
<%=Html.EditorFor(m => m.User.Surname)%>

输出结果如下所示:

代码语言:javascript
复制
<input class="text-box single-line" id="User_Surname" 
          name="User.Surname" type="text" value="" />

助手使用className +‘.èfieldName来构建id。

我需要将id传递给jQuery函数。有没有一种不用硬编码就能拥有它的方法呢?也许是一个可以使用ASP.NET MVC2约定的帮助器?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-29 23:19:28

我遵循了Mac的answer here的说明,并构建了自己的自定义扩展:

代码语言:javascript
复制
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();
    }
}

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

代码语言:javascript
复制
<%@ Import Namespace="MvcApplication2" %>

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

代码语言:javascript
复制
<%=Html.HtmlIdNameFor(m=>m.Customer.Name)%>
票数 9
EN

Stack Overflow用户

发布于 2013-05-29 01:57:27

ASP.NET MVC4内置了Html.IdFor(),可以返回以下内容:

代码语言:javascript
复制
@Html.IdFor(m => m.User.Surname)
票数 142
EN

Stack Overflow用户

发布于 2011-08-18 16:53:06

看这个问题:get the generated clientid for a form field,这是我的答案:

我使用这个帮助器:

代码语言:javascript
复制
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)

票数 44
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4829193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档