ASP MVC客户端验证和流利的帮助

时间:2011-07-10 14:31:57

标签: html asp.net-mvc fluent

我构建了一个流畅的帮助器,用于在ASP MVC中构建一个html表单。 但客户端验证在此背景下工作。 请帮助我理解为什么在我的帮助器中“EditorFor”不添加客户端验证。

@using (Html.BeginForm())
{
    var html = Html.TextBoxFor(c => c.UserName); // Good example client validation
    <input type="submit" value="ok" />
}

@FormHelpers.Form(Html.Form()
    .Title("Connection utilisateur")
    .Error("")
    .AddMessage("Entrez vos identifiant.")
    .AddRow(row => row
        .AddField(
            "Nom utilisateur",new EditItem()
            {
                Value = Html.TextBoxFor(model => model.UserName),
                // Validation client is not added !
                Error = Html.ValidationMessageFor(model => model.UserName),
            }
           ))
    .AddRow(row => row
        .AddField(
            "Mot de passe",
            Html.Edit(model => model.Password)))
    .AddRow(row => row
        .AddField(
            "Se souvenir<br/> de moi",
            Html.Edit(model => model.Souvenir)))
    .Build())

My Builder方法:

   public FormViewModelBuilder AddRow(Func<FormRowViewModelBuilder, FormRowViewModelBuilder> rowBuildFunc)
        {
            FormRowViewModelBuilder builderRow = new FormRowViewModelBuilder();
            FormRowViewModel row = rowBuildFunc(builderRow).FormRowViewModel;
            FormViewModel.AddRow(row);

            return this;
        }
public FormRowViewModelBuilder AddField(string title, EditItem value)
    {
        FormFieldViewModel info = new FormFieldViewModel();
        info.Title = title;
        info.EditItem = value; **// Validation is not added !**
        FormRowViewModel.Fields.Add(info);
        return this;
    }

2 个答案:

答案 0 :(得分:0)

你启用了吗

<appSettings>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>

在你的web.config文件中?你加载了mvc javascript文件吗?

<script src="@Url.Content("~/Scripts/jquery.tools.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

答案 1 :(得分:0)

我有解决方案,但我不明白Mvc Form与生成客户端验证进行交互。 简单的解决方案:

@using (Html.BeginForm())
{
@FormHelpers.Form(Html.Form()
    .Title("Connection utilisateur")
    .Error("")
    .AddMessage("Entrez vos identifiant.")
    .AddRow(row => row
        .AddField(
            "Nom utilisateur",new EditItem()
            {
                Value = Html.TextBoxFor(model => model.UserName),
                // Validation client is not added !
                Error = Html.ValidationMessageFor(model => model.UserName),
            }
           ))
    .AddRow(row => row
        .AddField(
            "Mot de passe",
            Html.Edit(model => model.Password)))
    .AddRow(row => row
        .AddField(
            "Se souvenir<br/> de moi",
            Html.Edit(model => model.Souvenir)))
    .Build())
}

或者

//Contructor 
public FormViewModelBuilder(MvcForm mvcForm)
{
    this.FormViewModel.MvcForm = mvcForm;
}
// Builder methode, Must be called in last
public FormViewModel Build()
{
    this.FormViewModel.MvcForm.EndForm();
    return FormViewModel;
}