0

我想为字符串创建模板,其中包括标签、带水印的文本框和注册表单的验证消息。另外,我想补充一点通知(例如星号),该字段是从模型中获取的必需字段。

到目前为止,我已经在 ~/Views/Account/EditorTemplates 中创建了包含以下内容的文件 string.cshtml:

<span class="editor-label>@Html.Label(ViewData.ModelMetadata.Watermark)</span>
<span class="editor-field">@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { placeholder =  ViewData.ModelMetadata.Watermark })</span>
<span class="error_message">@Html.ValidationMessage(ViewData.ModelMetadata.PropertyName)</span>

模型如下所示:

    [Required]
    [DataType(DataType.Text)]
    [Display(Prompt = "First name")]
    public string FirstName { get; set; }

鉴于我称之为如下:

@Html.EditorFor(m => m.FirstName)

有谁知道,我哪里出错了?

4

2 回答 2

1

必须调用您的编辑器模板Text.cshtml,而不是String.cshtml因为您使用该 [DataType(DataType.Text)]属性。

您还可以使用 UIHint 属性为编辑器模板指定自定义名称:

[Required]
[DataType(DataType.Text)]
[Display(Prompt = "First name")]
[UIHint("Foo")]
public string FirstName { get; set; }

现在你可以拥有~/Views/Account/EditorTemplates/Foo.cshtml.

于 2012-03-01T10:17:21.593 回答
1

安德烈,

您不显示消息的问题是这一行:

<span class="error_message">@Html.ValidationMessage(ViewData.ModelMetadata.PropertyName)</span>

如果您查看呈现的 HTML 源代码,您会看到类似以下内容:

<span class="field-validation-error" data-valmsg-for="<className>.FirstName" data-valmsg-replace="true"></span>

请注意,它在 data 属性中包含类。但是,ubobtrusive 与此不匹配。您需要渲染的内容很简单:

<span class="field-validation-error" data-valmsg-for="FirstName" data-valmsg-replace="true"></span>

为了完成此操作,请将编辑器中的代码更改为:

@Html.ValidationMessageFor(v => v)

同样,为了使您的代码更易于阅读,这两者也适用于您的其他代码......

@Html.LabelFor(v => v)
@Html.TextBoxFor(v => v, new { placeholder = ViewData.ModelMetadata.Watermark })
于 2015-04-01T13:02:26.343 回答