我目前正在为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”部分视图(在视图/共享/editOrplates下):

<%@ 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>

但是我看不到当前设置的方法。

我所能想到的就是创建一个包含“值”属性和“ ControlID”属性的“ HTML”视图。

但是,如果我基于这一观点,而不是“ 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 source)中的位置,其中对编辑器模板的初始化了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),
    }
};

在上面的呼叫中,“表达式”是初始化的(进一步添加了呼叫堆栈),其属性的名称正在编辑。

顺便说一句,下面的@sperling抓到了我最初错过的细节:如果您正在使用(或可能使用)非默认 HtmlHelper.IdAttributeDotReplacement, ,然后您需要替换 HtmlPrefix 属性 HtmlHelper.IdAttributeDotReplacement.

其他提示

一直在使用它来生成ID(带有模型前缀)。如果您想要名称属性,则跳过.replace()零件。

<%=Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(String.Empty).Replace(".", HtmlHelper.IdAttributeDotReplacement) %>

在我们的情况下,我们必须使用 Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldNameExpressionHelper.GetExpressionText

在剃须刀中使用的是:

           // hiddenFor was caching the value of this html input, and the value alone, nothing else on the page!
            Expression<Func<Web.ViewModels.ApiSettingsViewModel, int>> expression = (m => m.OrgApiLoginCredentials[i].OrgApiLoginId); 
        }
        <input type="hidden" value="@Model.OrgApiLoginCredentials[i].OrgApiLoginId" name="@Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression))" class="data-org-api-login-id"/>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top