2013-06-18 70 views
5

我有一個項目使用ASP.Net MVC & EF5。該模型有足夠多的字段,應用程序將需要幾個頁面來收集所有的數據。multipage/form mvc web應用程序的最佳實踐

一旦數據被收集,它就被提交給Web服務/ WebAPI。 (這不能改變,或者我會使用EF實體)。

什麼是最好的practive或最好的建議,因爲它填充頁面持久化數據模型?

+1

讓我指出有一個項目絲綢(模式和實踐的一部分)可在http://silk.codeplex.com/ –

回答

9

您可以創建一個每個頁面使用的ViewModel類(強類型視圖),並只存儲未在隱藏字段中編輯的字段。您的控制器會爲每個步驟提供操作方法和視圖。當提交每個步驟時,您將返回視圖(以及View Model)以進行下一步。

在最後一頁,您提交視圖模型並保存。

位指示代碼:

[HttpPost] 
public ActionResult Step1(MyBigViewModel model) 
{ 
    //do work 
    return View("Step2", model); 
} 

[HttpPost]  
public ActionResult Step2(MyBigViewModel model) 
{ 
    //do work 
    return View("Step3", model); 
} 

[HttpPost] 
public ActionResult Step3(MyBigViewModel model) 
{ 
    //save here 
    return View("Success", model); 
} 

另一種選擇是使用單一頁面上的「精靈般的」 UI。這裏有一個我已經成功使用過:

https://github.com/mstratman/jQuery-Smart-Wizard

+0

嗨@Rob,這是幾個月前,但我無法得到你的第一個答案在上面工作。每次提交「Step2」視圖的表單時,都會返回到Step1的HttpPost方法。 URL保持爲{Controller} \ Step1。 –

+0

這是一個公認的設計模式?這是不是有點「怪異」?這是最佳實踐嗎? – niico

9

問題 - 1

爲什麼我不能用Domain Model與視圖直接交互或爲什麼 我不能創建一個View Model並通過所有PropertiesDomain-Model

回答

比方說,你在你們班50場。我已實施數據註釋所以必填字段也存在。好。我在步驟1。我提交了表格。我的帖子操作方法表示表單不能提交!!!!爲什麼???

這是因爲有一些必填字段這不是步驟1的一部分。我有一個問題來自你。你想保留所有Properties在其他答案中提到? 如果你想添加所有的屬性在一個View-Model那麼爲什麼一個人與 域模型直接根據其他答案中提供的建議進行交互?因此,在一個視圖模型中添加所有屬性將是最糟糕的。對?

問題 - 2

什麼是最好的實踐的研究和最佳建議的堅持,從頁面到頁面的數據 模式,因爲它充滿?

回答

1. Use View Models with necessary properties only(that are required for 
    particular Step.). So there can be many View Models on the basis of 
    your Steps. This process will be very useful in long run 
2. Use AutoMapper to populate the info required for View Model from Domain Model. 

使用Strongly Types View Models,一旦數據之後再發送到Post Action Method按我的知識,你可以使用TempData存儲發佈的數據。它就像一個DataReader Class,一旦讀取,數據將會丟失。因此,在TempData中存儲的數據在讀取後將變爲空。

var Value = TempData["keyName"] //Once read data will be lost 

問題 - 3

該機型擁有該應用程序將需要 幾個頁面,收集所有的數據字段的足夠大的數字。

回答

所以堅持在數據讀取數據,甚至後,您可以像下面Alive

var Value = TempData["keyName"]; 
TempData.Keep();     //Data will not be lost for all Keys 
TempData.Keep("keyName");   //Data will not be lost for this Key 

問題 - 4

How will you handle the case when you have both Next and Previous Buttons? 

回答

TempData作品在新標籤/ Windows的也一樣Session變量一樣。

你可以使用Session變量太多,你能夠保持跨控制器/地區的數據,以及

希望這篇文章將幫助你很多。

相關問題