Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Razor:处理视图中的对象列表和模型验证_C#_Asp.net_Razor - Fatal编程技术网

C# Razor:处理视图中的对象列表和模型验证

C# Razor:处理视图中的对象列表和模型验证,c#,asp.net,razor,C#,Asp.net,Razor,我有两个这样的课程(为了简单起见) 公共类页面 { 整数页码; 字符串内容; } 公共课堂用书 { 公共字符串名称; 公共列表页; } 现在,在razor视图中,我有一个表单,允许添加一本书,表单中有一个页面列表,可以添加页面 目前,页面被动态添加到表单中,我使用Request.form在控制器中获取值,用于在控制器中构建页面列表。问题是,在控制器中输入操作之前,如何使用页面验证模型(例如,类似于页面的内容必须不为空) 这些字段是通过JQuery添加到表单中的。我认为不可能将页面列表直接绑定到

我有两个这样的课程(为了简单起见)

公共类页面
{
整数页码;
字符串内容;
}
公共课堂用书
{
公共字符串名称;
公共列表页;
}
现在,在razor视图中,我有一个表单,允许添加一本书,表单中有一个页面列表,可以添加页面

目前,页面被动态添加到表单中,我使用Request.form在控制器中获取值,用于在控制器中构建页面列表。问题是,在控制器中输入操作之前,如何使用页面验证模型(例如,类似于页面的内容必须不为空)

这些字段是通过JQuery添加到表单中的。我认为不可能将页面列表直接绑定到视图中的模型,尤其是在使用javascript生成字段时。但也许我错过了什么


谢谢

您可以在将数据发送到服务器之前验证JQuery中的页面

也可以使用过滤器。筛选器是在执行操作之前执行的方法。(您可能已经看到或使用了[授权]过滤器)

您可以创建一个过滤器来验证数据,如果验证失败,请求将被重定向到错误页面


您可以在ASP.NET中使用模型绑定,即使您正在添加jquery表单元素,也可以参见以下内容以创建绑定到模型的集合:

我认为您的表单可以这样做,以便正确运行模型绑定:

<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"/>
然后,为了验证,我建议您对模型使用数据注释,在page对象的content属性之前使用[Required]标记,或者[MinLenght],请参见关于数据注释的内容

[Required]
public string Content { get; set; }
然后在视图中使用jquery.validate(不要忘记在视图中启用它),在控制器中,当您收到模型时,可以使用

public ActionResult Create(YourObject object)
{
    if (ModelState.IsValid)
    {
            // code when model is valid
    }
}

使用MVC,您可以在模型属性上使用DataAnnotation

使用
使用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; }
}
公共课堂教材{
[必需]
公共字符串名称{get;set;}
公共列表页{get;set;}
}
公共类页面{
[必需]
公共整数页码{get;set;}
[必需]
公共字符串内容{get;set;}
}

要更深入地理解,请阅读以下内容:

我知道所需的属性,但这无助于使模型绑定器自动将字段的dinamic列表与列表绑定。对不起,这就是我要找的!谢谢你,好心的先生!Avec plaisir!我建议您在所有数据模型中使用数据注释。如果您不愿意将数据注释直接放在业务对象上,您可以创建一种视图模型,即业务对象的兄弟,承载所有验证的兄弟,翻译等。我通常会这样做,我会添加一些字段作为列表来填充选择框等等。我需要做的是控制将金额重新划分为几个类,我需要检查类的总金额是否等于初始金额。因此,我将创建一个自定义验证器,并将其注释放在初始模型上。是的,您可以:-)它看起来非常具体,我没有看到执行该检查的基本验证。。。
public ActionResult Create(YourObject object)
{
    if (ModelState.IsValid)
    {
            // code when model is valid
    }
}
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; }
}