2012-01-03 60 views
1

可以說我有一個接受Person對象的視圖。我應該只使用兩個對象的視圖模型嗎?

有三個屬性,FirstNameLastNameAge

現在可以說,我添加一個文本字段,不是對象的一部分。

我不需要文本框的值,它只是填充了用戶的數據。

當您編輯的字段和發佈Person控制器,讓我們假設有一個驗證的問題,所以你返回的人有錯誤

的問題是現在的附加文本框已經失去了它的,因爲值對象回來了不是模型的一部分。

所以我做了一個ViewModel,該字段的字符串屬性和Person屬性保持所有的值。似乎有更好的方法來保持「特殊」文本框中的值?

回答

2

您應該能夠從發佈的字段中獲得額外的字段。你如何通過ViewBag第一次設置它?你應該可以重新設置它。

但是,使用ViewModel究竟有什麼問題?遲早你會有2或3個額外的領域,或一個人和約會。

+0

我猜想只是「看起來」錯了。我不需要任何領域的數據,我只是不能或不知道如何在驗證失敗時再次從後操作中填充該字段,因爲它不是Person對象的一部分,我將返回到風景。 – MisterIsaak 2012-01-03 18:14:23

2

我認爲這是完全正確的做法。視圖模型是視圖的模型而不是非UI處理的模型,它包含一個Person和額外的可視信息。它完全符合這個概念。你的人大概是一個(非視圖)模型,因此當你有一個有效的回帖時,你會讓人保存它的數據(或其他),並且額外的可視信息在那一點上是不相關的,因爲你已經不在了一個'查看/用戶界面'部分的應用程序。 使視圖強類型你的視圖模型,並與視圖模型它

@model myViewModel 

@Model.Person.FirstName 
@Model.OtherViewOnlyValue 

轉到內訪問人,比ViewBags /會話/的ViewData等

1

有很多次,你可能會覺得清爽多了您不需要將UI映射包含到ViewModel中,但大多數時候您最終都會將映射添加到ViewModel中。我相信ViewModel應該代表您的UI屏幕上的所有內容。由於HTTP是無狀態的,表單後值將在填充用戶界面控件中發揮重要作用。

相關問題