如何在自定义编辑器模板中获取模型的字段名称

pho*_*tom 20 asp.net-mvc-3

我正在为文本区域控件构建我的第一个自定义编辑器模板.到目前为止我的代码是 -

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<%= Html.TextAreaFor( Model => Model , 2, 30, 
     new { @class = "html", @placeholder = ViewData.ModelMetadata.Watermark }) %>
Run Code Online (Sandbox Code Playgroud)

它到目前为止并不多,但确实有效.但是我们需要添加一个字符计数器字段来显示用户可以键入的剩余字符数.我知道如何使用所有JavaScript来使其工作.

因此,为了使命名系统保持一致,我将添加一个名为".charCounter"的控件来显示剩余的剩余字符数.我的问题是我无法弄清楚能够检索模型的字段名称的正确语法.

最终版本看起来像(JavaScript省略) -

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<%= Html.TextAreaFor( Model => Model , 2, 30, 
     new { @class = "html", @placeholder = ViewData.ModelMetadata.Watermark }) %>
<span class="xxx">Remaining characters - 
     <input readonly type="text" name="<fieldName>.charCounter" />
</span>
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 30

你可以使用ViewData.TemplateInfo.HtmlFieldPrefix,像这样:

<input 
    readonly="readonly" 
    type="text" 
    name="<%= ViewData.TemplateInfo.HtmlFieldPrefix %>.charCounter" 
/>
Run Code Online (Sandbox Code Playgroud)


Mic*_*cah 16

我遇到了一个问题,其中PropertyName没有返回Model前缀,例如Contact.FirstName.我能够使用它返回HTML字段Id:

@ViewData.TemplateInfo.GetFullHtmlFieldId("")
Run Code Online (Sandbox Code Playgroud)

返回: Contact_FirstName

您可以使用以下命令返回字段名称:

@ViewData.TemplateInfo.GetFullHtmlFieldName("")
Run Code Online (Sandbox Code Playgroud)

返回:

Contact.FirstName