Razor:处理视图中的对象列表和模型验证
Razor: Handling a list of objects within a view, and model validation
我有两个这样的类(为简单起见)
public class Page
{
int pageNumber;
string content;
}
public class Book
{
public string name;
public List<Page> pages;
}
现在,在剃须刀视图中,我有一个表单允许添加一本书,表单中有一个页面列表,可以添加页面。
目前,页面是动态添加到表单中的,我使用 Request.Form 在我的控制器中获取值以在控制器中构建我的页面列表。问题是,在控制器中输入操作之前,如何使用页面验证模型(例如,页面之类的内容必须不为空)。
表单中添加了 JQuery 字段。我认为不可能将页面列表直接绑定到视图中的模型,尤其是当使用 javascript 生成字段时。但也许我遗漏了什么。
谢谢
您可以在将数据发送到服务器之前验证 JQuery 中的页面。
或者您可以使用过滤器。过滤器是在执行操作之前执行的方法。 (您可能已经看到或使用过 [Authorize] 过滤器)
您可以创建一个过滤器来验证数据,如果验证失败,请求将被重定向到错误页面。
您可以在 ASP.NET 中使用模型绑定,即使您正在添加 jquery 表单元素,请参阅此以创建绑定到模型的集合:
ASP.NET Wire Format for Model Binding to Arrays, Lists, Collections, Dictionaries
我认为您的表单可以这样完成,以便 运行 模型正确绑定:
<input type="text" name="name"/>
<input type="text" name="pages[0].pageNumber"/>
<input type="text" name="pages[0].content" />
<input type="text" name="pages[1].pageNumber"/>
<input type="text" name="pages[1].content"/>
<input type="text" name="pages[3].pageNumber"/>
<input type="text" name="pages[3].content"/>
通过这种用法,您可以从视图接收 Book 对象到您的控制器:
public ActionResult Create(Book myBook)
{}
然后,为了验证,我建议您对模型使用数据注释,在页面对象的内容 属性 或 [MinLenght] 之前使用 [Required] 标记,请参阅此 Microsoft documentation关于数据注释。
[Required]
public string Content { get; set; }
然后在您的视图中使用 jquery.validate(不要忘记在视图中启用它)并在控制器中,当您收到模型时,您可以使用
检查模型状态
public ActionResult Create(YourObject object)
{
if (ModelState.IsValid)
{
// code when model is valid
}
}
通过 MVC,您可以在模型属性上使用 DataAnnotations。
使用using System.ComponentModel.DataAnnotations;
public class Book{
[Required]
public string Name{ get; set; }
public List<Page> Pages { get; set; }
}
public class Page{
[Required]
public int PageNumber{ get; set; }
[Required]
public string Content { get; set; }
}
如需更深入的了解,请阅读:http://www.asp.net/mvc/overview/older-versions/getting-started-with-aspnet-mvc4/adding-validation-to-the-model
我有两个这样的类(为简单起见)
public class Page
{
int pageNumber;
string content;
}
public class Book
{
public string name;
public List<Page> pages;
}
现在,在剃须刀视图中,我有一个表单允许添加一本书,表单中有一个页面列表,可以添加页面。
目前,页面是动态添加到表单中的,我使用 Request.Form 在我的控制器中获取值以在控制器中构建我的页面列表。问题是,在控制器中输入操作之前,如何使用页面验证模型(例如,页面之类的内容必须不为空)。
表单中添加了 JQuery 字段。我认为不可能将页面列表直接绑定到视图中的模型,尤其是当使用 javascript 生成字段时。但也许我遗漏了什么。
谢谢
您可以在将数据发送到服务器之前验证 JQuery 中的页面。
或者您可以使用过滤器。过滤器是在执行操作之前执行的方法。 (您可能已经看到或使用过 [Authorize] 过滤器)
您可以创建一个过滤器来验证数据,如果验证失败,请求将被重定向到错误页面。
您可以在 ASP.NET 中使用模型绑定,即使您正在添加 jquery 表单元素,请参阅此以创建绑定到模型的集合:
ASP.NET Wire Format for Model Binding to Arrays, Lists, Collections, Dictionaries
我认为您的表单可以这样完成,以便 运行 模型正确绑定:
<input type="text" name="name"/>
<input type="text" name="pages[0].pageNumber"/>
<input type="text" name="pages[0].content" />
<input type="text" name="pages[1].pageNumber"/>
<input type="text" name="pages[1].content"/>
<input type="text" name="pages[3].pageNumber"/>
<input type="text" name="pages[3].content"/>
通过这种用法,您可以从视图接收 Book 对象到您的控制器:
public ActionResult Create(Book myBook)
{}
然后,为了验证,我建议您对模型使用数据注释,在页面对象的内容 属性 或 [MinLenght] 之前使用 [Required] 标记,请参阅此 Microsoft documentation关于数据注释。
[Required]
public string Content { get; set; }
然后在您的视图中使用 jquery.validate(不要忘记在视图中启用它)并在控制器中,当您收到模型时,您可以使用
检查模型状态public ActionResult Create(YourObject object)
{
if (ModelState.IsValid)
{
// code when model is valid
}
}
通过 MVC,您可以在模型属性上使用 DataAnnotations。
使用using System.ComponentModel.DataAnnotations;
public class Book{
[Required]
public string Name{ get; set; }
public List<Page> Pages { get; set; }
}
public class Page{
[Required]
public int PageNumber{ get; set; }
[Required]
public string Content { get; set; }
}
如需更深入的了解,请阅读:http://www.asp.net/mvc/overview/older-versions/getting-started-with-aspnet-mvc4/adding-validation-to-the-model