2

次のような文字列の共有エディタを定義しました

<%@ Control Language = "C#" Inherits = "System.Web.Mvc.ViewUserControl"%>
<%= Html.LabelFor(model => model)%>
<%= Html.TextBoxFor(model => model)%>
<%= Html.ValidationMessageFor(model => model)%>

今、私は別のコントロールでこのようなカスタムエディタを呼び出しています

        <%= Html.EditorFor(model=>model.Username)%>
        <%= Html.EditorFor(model=>model.Email)%>
        <%= Html.EditorFor(model=>model.Password)%>

私のモデルはこんな感じです

    [Required(ErrorMessage="Le nom d'utilisateur est requis.")]
    [DataType(DataType.Text)]
    [DisplayName("Nom d'utilisateur")]
    public string Username { get; set; }

    [Required(ErrorMessage = "L'email est requis.")]
    [DataType(DataType.EmailAddress)]
    [DisplayName("Courriel")]
    public string Email { get; set; }

    [Required(ErrorMessage = "Le mot de passe est requis.")]
    [ValidatePasswordLength]
    [DataType(DataType.Password)]
    [DisplayName("Mot de passe")]
    public string Password { get; set; }

レンダリングされる唯一の表示は、Eメールフィールドです。他の2つはレンダリングされませんか?DataType.TextとDataType.Passwordを削除すると、すべての表示フィールドがレンダリングされますか?

非常に奇妙な行動...

誰かが理由を知っていますか?

4

2 に答える 2

0

DataTypeは、レンダリングに使用されるテンプレートのタイプを制御します。テキストまたはパスワードを指定すると、MVCはそれらのデフォルトテンプレート(組み込み)を選択し、テンプレートを無視します。

組み込みの電子メールテンプレートがないため、電子メールは機能します。したがって、文字列にフォールバックします。

編集:私は誤解したと思います。まったくレンダリングしないと言っていますか?EditorTemplatesフォルダーに空白のパスワードとテキストのテンプレートがありますか?

于 2011-11-29T18:40:14.573 に答える
0

モデル内のすべてのプロパティからのエラーを表示するには、ValidationSummary が必要です。それ以外の場合は、モデル内の各プロパティに対して ValidationMessageFor が必要になります。

これはうまくいきます:

<%= Html.ValidationSummary() %>

またはこれ:

<%= Html.ValidationMessageFor(model.UserName) %>
<%= Html.ValidationMessageFor(model.Email) %>
<%= Html.ValidationMessageFor(model.Password) %>
于 2011-05-09T21:57:47.710 に答える