簡體   English   中英

剃刀:處理視圖中的對象列表以及模型驗證

[英]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線格式

我認為您可以按照這種方式完成表格,以便正確運行模型綁定:

<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)
    {}

然后,為了進行驗證,建議您對模型使用數據注釋,在頁面對象的content屬性之前使用[Required]標簽,或使用[MinLenght],請參閱有關數據注釋的Microsoft文檔

[Required]
public string Content { get; set; }

然后在您的視圖中使用jquery.validate(不要忘記在視圖中啟用它),並在控制器中,當您收到模型時,可以使用以下命令檢查modelstate

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM