2012-07-10 55 views
2

我正在使用需要多次登錄的MVC3構建應用程序。首先是標準表格認證。另一個是作爲行政管理部分的障礙,並且第三次會議過期。MVC3:我們應該爲小改變創建一個新視圖還是將邏輯放置在控制器中?

我想重複儘可能多的代碼,但每個頁面都有一些細微的變化。例如,在過期會話中,我們希望將用戶名從可編輯文本框更改爲僅顯示過期會話的用戶名。我們也想更改一些文本,如標題爲「Session Expired」。

最佳做法是什麼?

想法1: 我應該通過向控制器添加一些參數字符串和布爾標誌來重新使用視圖,它將設置標題以及是否可編輯?這將允許我重新使用控制器。

想法2: 有一個單獨的控制器/每個視圖。由於這些頁面與其他頁面相似,但與應用程序的其他部分不同,因此我會創建一個新的佈局模板,然後將每個視圖分開。

提前感謝,你們真棒!

+1

看着部分視圖? – Amalea 2012-07-10 15:25:59

+0

是的,如果我採取局部視圖的方法,我可能只是使用另一種佈局,只是創建使用其他佈局的常規視圖......將改變的東西是一個非常基本的頁面上的主要元素。你有不同的建議嗎? – MattyP 2012-07-10 15:39:32

回答

1

我認爲這是個人偏好,你想讓代碼有多複雜。

就我個人而言,我看到這種情況發生得最多的方式是在模型中設置某種可編輯標誌,並從控制器傳遞給視圖(不過您通過視圖呈現該視圖或局部的)。

HTH!

+0

感謝您的快速回復。如果我可以使用單個身份驗證頁面進行這些小更改,那將是非常棒的......如果我這樣做,我想我需要爲我的控制器操作添加參數。如果我這樣做,那麼用戶可以操縱這些值嗎? – MattyP 2012-07-10 15:29:33

+1

我該怎麼做,是每次都在控制器中設置狀態。如果你依賴的東西被傳遞迴需要安全的控制器/操作,那麼你可能希望使用ViewBag來保存這些數據,而不是使用模型(它將被HTTPPOST返回)處理。 – Sean 2012-07-10 15:47:57

2

例如,在會話過期

使用相同的控制器,並取決於會話的狀態,建立正確的模型,並返回特定的局部視圖

public ActionResult sessionInfo() { 

     if (sessionIsAlive){ 

      //build the model for the current user 
      return PartialView("logged", model); 
     } 

     //build the model for the session expired 
     return PartialView("expired", model); 

} 
+0

我喜歡這個過期的會話,謝謝!我仍然需要解決這個不適合的管理訪問頁面,但我最終可能會將這種方法與Sean的建議結合使用。謝謝! – MattyP 2012-07-10 16:50:52

+0

你需要像一個管理欄或只是一個鏈接進入管理頁面? – 2012-07-10 16:58:35

0

在我看來,這個決定必須做直接爲模型,如果你模型的變化,在每個窗口遵循標準我會試圖做我的意見強烈類型爲每個模型。現在尊重這些行動,在這裏我會試着打電話給同一個行動,然後根據收到的模型做出決定。

相關問題