簡體   English   中英

一個視圖有兩個ViewModel

[英]Two ViewModels for one View

我正在使用ASP.NET MVC開發Web應用程序,並且一直在嘗試避免使用ViewBag,因此我創建了一些視圖模型來填充下拉列表,並通常在視圖中傳遞所需的數據。 同時,我想保持數據綁定的整潔,避免使用不會被綁定的屬性(不使用include / exclude屬性),並且有人告訴我,顯然returnmodel對於此目的非常有用。

那么為一個視圖創建兩個獨立模型是一個壞主意嗎? 一個包含所有需要顯示的數據,另一個僅包含我的表單中的字段,或者這是超出實質內容的表單,我是否應該重新考慮更改設計?

編輯:一個簡單的例子,因為我不太會解釋

class ViewModelA{ // passed to the view and then bound to when form is submitted
    List<KeyValuePair<int, string>> DropDownValues; // will be always empty while databinding
    int SelectedValue; // will be always 0 when passed to the view
    ...
}

我應該用替換ViewModelA嗎

class ViewModelB{ // contains data passed to the view
    List<KeyValuePair<int, string>> DropDownValues;
    ...
}


class ReturnModel{ // contains data returned from the view
    int SelectedValue;
    ...
}

顯然,在這里我可以直接綁定到我的模型,但讓我們假設它更復雜,並且必須在保存數據之前對其進行處理。

我想我知道你在問什么。 您說的是,您擁有一個具有以下屬性的視圖模型:年齡,名稱,CountryOfResidence(用於下拉菜單)以及其他一些屬性。 但是,當您創建一個新的人時,您只將年齡,姓名,IdOfCountry發布到控制器。

因此,您的問題是在不需要時發布整個視圖模型的目的是什么。 公平的問題。

您可以通過多種方式執行此操作。 這是一種方法:

  1. 創建具有公共屬性的基類(用於發布)
  2. 創建具有更多屬性的派生類的視圖。

有些人將1稱為數據傳輸對象(DTO)。 這些DTO將在表示層,服務層,業務層,數據訪問層等之間共享以進行通信。

暫無
暫無

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

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