【问题标题】:How to read name of html helper element如何读取 html 辅助元素的名称
【发布时间】:2011-07-27 18:12:12
【问题描述】:

在 mvc 中是否有机会读取将分配给 html 控件的名称?

例如我使用这个代码:

<div>
    @Html.LabelFor(x => x.Name)
    @Html.TextBoxFor(x => x.Name)
    @Html.ValidationMessageFor(x => x.Name)
    @Html.HiddenFor(x => x.Id)

    <div>
        I want to display here a TextBox name
    </div>

</div>

我想得到一个输入名称的名称。此代码是部分视图的片段。 元素名称类似于 children[1].Name

【问题讨论】:

  • 它有什么用?你想做什么?

标签: c# asp.net-mvc asp.net-mvc-3 razor html-helper


【解决方案1】:

@Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName("名称") 或者您可以使用通用 HtmlHelper 的扩展方法将其与 Lambda 表达式一起使用

public static string GetFullHtmlFieldName<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
    return htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression));
}

使用(Html.GetFullHtmlFieldName(x =&gt; x.Name)

【讨论】:

  • @archil 我不能对变量使用 lambda 表达式。没有重载。仅提供字符串类型。
  • 你可以使用@Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName("Name")
  • @tugberk_ugurlu:你使用的是什么版本的 MVC?
  • 是的,您必须使用@Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName("Name")。
  • @Hallaghan MVC 3 与剃刀视图引擎。不支持兰巴达。我很好奇你们两个是如何做到这一点的:你们的 MVC 3 和我理解的一样快吗?
【解决方案2】:

我猜这只是在较新版本的 MVC 中,但您可能只使用:

@Html.NameFor(x => x.Name)

文档:http://msdn.microsoft.com/en-us/library/hh833703(v=vs.108).aspx

【讨论】:

  • +1 太棒了,我想知道有多少人会创建一个模拟内置功能的扩展:) 很高兴我看到了这个。
  • 我需要创建自己的 HtmlHelper 扩展,即使使用 NameExtensions.NameFor() 也遇到了一些麻烦。但是我遇到的问题是因为我实现了我的助手并使用了 Expression> 类型的表达式,而不是使用通用返回值,例如:Expression>。使用“object”,它会自动添加一个“Convert”表达式,这也不能与 NameFor 一起正常工作。 (也就是说,如果您真的需要在 lamdba 表达式中进行转换,我确信仍然有理由处理 Convert 问题。)
猜你喜欢
  • 2018-11-12
  • 1970-01-01
  • 2019-09-07
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多