asp.net-mvc – 在EditorTemplate中渲染字段名称(通过EditorFor()渲染)

我正在ASP.NET MVC中为一个网站构建管理后端。

在ASP.NET MVC应用程序中,我已经开始使用“EditorFor”帮助程序,如下所示:

<div id="content-edit" class="data-form">
    <p>
        <%= Html.LabelFor(c => c.Title) %>
        <%= Html.TextBoxFor(c => c.Title)%>
    </p>
    <p>
        <%= Html.LabelFor(c => c.Biography) %>
        <%= Html.EditorFor(c => c. Biography)%>
    </p>
</div>

在模型中,“传记”字段已经被装饰为:[UIHelper(“Html”)]。

我有一个’Html’部分视图(在视图/共享/编辑器模板下):

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.XML.Linq.XElement>" %>

<textarea class="html">
    <%= Model.ToString() %>
</textarea>

现在我想将’textarea’的’ID’属性设置为字段的名称,如下所示:

<textarea id="Biography" class="html">
    ...
</textarea>

但是,目前我没有办法做到这一点。

我可以想到的是创建一个包含“Value”属性和“ControlID”属性的“Html”viewmodel。

但是,如果我以此为基础,而不是“System.XML.Linq.XElement”,那么它将不再与“EditorFor”帮助器方法兼容,我必须手动完成所有操作。

有人还有类似的问题吗?

解决方法

您应该能够从视图的ViewData.TemplateInfo.HtmlFieldPrefix属性提取所需的ID。喜欢这个:
<%@ Control Language="C#"
      Inherits="System.Web.Mvc.ViewUserControl<System.XML.Linq.XElement>" %>
<textarea id="<%= ViewData.TemplateInfo.HtmlFieldPrefix %>" class="html">
    <%= Model.ToString() %>
</textarea>

为了显示为什么这样工作,这里是TemplateHelpers.cs(MVC2 Preview 1源)中的位置,其中为数据库模板控件初始化了ViewData:

ViewDataDictionary viewData = new ViewDataDictionary(html.ViewDataContainer.ViewData) {
    Model = modelValue,TemplateInfo = new TemplateInfo {
        FormattedModelValue = formattedModelValue,ModelType = modelType,HtmlFieldPrefix = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(expression),IsNullableValueType = (underlyingNullableType != null),}
};

在上面的调用中,使用正在编辑的属性名称对“expression”进行初始化(进一步调用堆栈)。

BTW,@Sperling以下抓住了我最初想念的细节:如果您使用(或可能使用)非认的HtmlHelper.IdAttributeDotReplacement,那么您将要使用HtmlHelper.IdAttributeDotReplacement替换HtmlPrefix属性中的点。

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...