验证多模型ASP.NET MVC中的单个模型

时间:2018-03-01 07:00:22

标签: javascript c# asp.net-mvc

如何在多个模型中验证单个模型

这是我的两个模特 MODELA

 public class ModelA
    {
        [Display(Name = "Test1")]
        [Required(ErrorMessage = "Test1 is required.")]
        public string Test1 { get; set; }
    }

我的第二个模型模型B

  public class ModelB
    {
        [Display(Name = "Test2")]
        [Required(ErrorMessage = "Test2 is required.")]
        public string Test2 { get; set; }
    }

我的主要模式

 public class MainModel
    {
        public ModelA ModelA { get; set; }
        public ModelB ModelB { get; set; }
    }

这是我的Index.cshtml

@using (Html.BeginForm("Test1", "SubmitModel", FormMethod.Post, new { id = "TestForm", role = "form", enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()
    @Html.TextBoxFor(Model => Model.ModelA.Test1, new { @class = "form-control" })
    @Html.ValidationMessageFor(Model => Model.ModelA.Test1, "", new { @class = "text-danger" })

    @Html.TextBoxFor(Model => Model.ModelB.Test2, new { @class = "form-control" })
    @Html.ValidationMessageFor(Model => Model.ModelB.Test2, "", new { @class = "text-danger" })
    <input type="submit" value="next" />
}

我的控制器 我的问题存在的地方 我必须验证单个模型

public PartialViewResult Test1(MainModel model)
        {
            if (TryValidateModel(model.ModelA)) // This will validate both model at a time not a single model 
            {
                return PartialView("Index", model);
            }
            return PartialView("Index");
        }

我如何只验证一个模型 例如,如果Textbox Text 1为空,我必须一次只验证一个模型,这意味着在此阶段的ModelA

2 个答案:

答案 0 :(得分:0)

您可以尝试以下内容:

 public PartialViewResult Test1(MainModel model)
            {
             if(string.IsNullOrWhiteSpace(Model.ModelB.Test1)
               {
                ModelState.Remove("Model.ModelB.Test2");
                if (TryValidateModel(model.ModelA)) 
                 {
                    return PartialView("Index", model);
                 }
                return PartialView("Index");
               }

            }

但完全不清楚为什么你会需要这样的东西。

答案 1 :(得分:0)

DefaultModelBinder将在进行绑定时为您验证所有内容。 如果MainModel对象的所有条件都正常,则设置ModelState.IsValid。

public PartialViewResult Test1(MainModel model)
    {
        if (ModelState.IsValid)  
        {
            return PartialView("Index", model);
        }
        return PartialView("Index");
    }