如何在多个模型中验证单个模型
这是我的两个模特 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
答案 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");
}