2011-01-31 7 views
4

私は流暢な検証をクライアントサイドの目立たない検証で使用します。検証メッセージにプロパティの名前の代わりに '{PropertyName}'が含まれています

<fieldset class="edit-root-form"> 
    <p> 
     @Html.LabelFor(model => model.Login, UserRes.Login) 
     @Html.TextBoxFor(model => model.Login) 
     @Html.ValidationMessageFor(model => model.Login) 
    </p>   
</fieldset> 

流暢検証ルール:

this.RuleFor(x => x.Login).NotNull().EmailAddress() 

そして、私はこのようなエラーメッセージました: '{PropertyName意味}' が空であってはなりませんが。

Genered HTML:

<input data-val="true" data-val-regex="&amp;#39;{PropertyName}&amp;#39; is not a valid 
email address." data-val-required="&amp;#39;{PropertyName}&amp;#39; must not be 
empty." id="Login" name="Login" type="text" value="" class="input-validation-error"> 

なぜMVCはPropertyName意味実際のフィールド名を置き換え `tを?

答えて

3

私にとってうまく動作します。最新のFluentValidationバージョン(2.0.0.0)とASP.NET MVC 3 RTMを使用しています。

モデルとバリ:

[Validator(typeof(MyViewModelValidator))] 
public class MyViewModel 
{ 
    public string Login { get; set; } 
} 

public class MyViewModelValidator : AbstractValidator<MyViewModel> 
{ 
    public MyViewModelValidator() 
    { 
     RuleFor(x => x.Login).NotNull().EmailAddress(); 
    } 
} 

コントローラー:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new MyViewModel()); 
    } 

    [HttpPost] 
    public ActionResult Index(MyViewModel model) 
    { 
     return View(model); 
    } 
} 

ビュー:Global.asax

@model AppName.Models.MyViewModel 
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script> 
@using (Html.BeginForm()) 
{ 
    @Html.LabelFor(model => model.Login, "Login") 
    @Html.TextBoxFor(model => model.Login) 
    @Html.ValidationMessageFor(model => model.Login) 
    <input type="submit" value="OK" /> 
} 

Application_Start

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 

    RegisterGlobalFilters(GlobalFilters.Filters); 
    RegisterRoutes(RouteTable.Routes); 
    ModelValidatorProviders.Providers.Add(new FluentValidationModelValidatorProvider(new AttributedValidatorFactory())); 
} 

二例:

  1. 空のテキストボックスを残す:'Login' must not be empty.検証エラーメッセージが表示されます。
  2. 無効な電子メールを入力してください:'Login' is not a valid email address.検証エラーメッセージが表示されます。

そして最終的にここにテキストボックスのために生成されたHTMLです:

<input data-val="true" data-val-regex="&amp;#39;Login&amp;#39; is not a valid email address." data-val-regex-pattern="^(?:[\w\!\#\$\%\&amp;\&#39;\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&amp;\&#39;\*\+\-\/\=\?\^\`\{\|\}\~][email protected](?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!\.)){0,61}[a-zA-Z0-9]?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$" data-val-required="&amp;#39;Login&amp;#39; must not be empty." id="Login" name="Login" type="text" value="" /> 
+0

は、私はあなたの例を使用して、プロジェクトを作成しました。そして私はまだ実際のフィールド名の代わりに{PropertyName}が表示されます。私はFluentValidationバージョン(2.0.0.0)とASP.NET MVC 3バージョン3.0.11209.0 –

+0

@Ivanを使用していますが、RTMバージョンを使用していないようです。私の 'System.Web.Mvc'アセンブリには、RTMであるバージョン「3.0.20105.0」があります。 –

+0

@Ivan、はい、以前のバージョンはアンインストールしましたか?また、アプリケーションが正しいアセンブリを指していることを確認してください。 –

関連する問題