.net Viewmodel内部模型的ModelState不起作用

mw3dktmi  于 2023-02-14  发布在  .NET
关注(0)|答案(1)|浏览(102)

我有一个视图模型,如下所示

public class SampleViewModel
    {
        public Model1 Property1 { get; set; }
    }

public class Model1
{
    [Required]
    public string Name{get; set;}
}

在视图中我们有

@Html.DisplayFor(m=>m.Model1.Name)
@Html.ValidationMessageFor(m=>m.Model1.Name)

在Controller中,我们有

public ActionResult Index()
{
     Model1 a= new Model1();
     SampleViewModel s= new SampleViewModel();
     s.Property1=a;
     return View(s);
}

当Name为null时,即使Name具有Required属性,ModelState也不会填充模型错误。我哪里做错了?

3htmauhk

3htmauhk1#

要实现这一点,您至少应该创建一些<input>标签。例如,要使用Html.TextBoxFor()

@Html.ValidationSummary(true)

@Html.DisplayFor(m => m.Property1.Name)
@Html.ValidationMessageFor(m => m.Property1.Name)

<p>@Html.TextBoxFor(m => m.Property1.Name)</p>
<br />
<input type="submit" value="Submit " />

如果查看MVC生成的HTML,就可以发现问题。@Html.TextBoxFor(m => m.Property1.Name)呈现为以下标记:

<input data-val="true" data-val-required="The Name field is required." id="Property1_Name" name="Property1.Name" type="text" value="" />

使用data-val-required属性,可以正确验证发布的页面,并且ModelState.IsValid在没有输入数据时返回false
或者您可以用途:

@Html.HiddenFor(m => m.Property1.Name)

类似的问题描述如下:Required string attribute with null value gives IsValid=true in ASP.NET Core 2 Razor Page

相关问题