2012-04-11 57 views
1

是否可以在mvc3中有一個多步表單(嚮導)? 使其變得簡單:修改產品的2步表單。mvc3多步表單(嚮導)

可能的解決方案:使用相同的viewbag.Product以不同的形式(將它從一個傳遞到另一個)。

謝謝。

+1

[多步註冊過程問題在asp.net mvc(splitted viewmodels,單一模型)]中可能的重複](http://stackoverflow.com/questions/6402628/multi-step-registration-process-issues-in -asp-net-mvc-splitted-viewmodels-sing) – 2012-04-11 16:45:13

+0

看看這個[博客](http://afana.me/post/create-wizard-in-aspnet-mvc-3.aspx) – Dmitry 2012-04-11 16:59:05

+0

可能的重複[任何示例MVC3嚮導應用程序(多步驟)(無JQUERY)](http://stackoverflow.com/questions/8054640/any-sample-mvc3-wizard-apps-multi-step-no-jquery) – jgauffin 2012-06-12 17:33:10

回答

1

嚮導只是處理簡單模型的簡單步驟。沒有理由爲嚮導創建多個模型。你所要做的就是創建一個單一模型,並在單個控制器中的動作之間傳遞它。

public class MyModel 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid Id { get; set }; 
    public string StepOneData { get; set; } 
    public string StepTwoData { get; set; } 
} 

上述coed是愚蠢的簡單,所以在那裏取代你的領域。接下來,我們從啓動我們嚮導的簡單操作開始。

public ActionResult WizardStep1() 
    { 
     return View(new MyModel()); 
    } 

這調用視圖「WizardStep1.cshtml(如果使用剃刀即是)。你可以用創建模板嚮導,如果你想要的。我們只是將被重定向到後一個不同的動作。

<WizardStep1.cshtml> 
@using (Html.BeginForm("WizardStep2", "MyWizard")) { 

說明的一點是,我們將張貼這不同的操作;在WizardStep2行動

[HttpPost] 
    public ActionResult WizardStep2(MyModel myModel) 
    { 
     return ModelState.IsValid ? View(myModel) : View("WizardStep1", myModel); 
    } 

在這次行動中,我們檢查,如果我們的模型是有效的,如果是這樣,我們將其發送到我們的嚮導tep2.cshtml查看其他我們發送回到第一步驗證錯誤。在每一步中,我們將它發送到下一步,驗證該步驟並繼續前進。現在一些精明的開發人員可能會說,如果我們在步驟之間使用[必需的]屬性或其他數據註釋,我們就不能在這種步驟之間移動。你會是對的,所以刪除那些還沒有被檢查的項目上的錯誤。如下所示。

[HttpPost] 
    public ActionResult WizardStep3(MyModel myModel) 
    { 
     foreach (var error in ModelState["StepTwoData"].Errors) 
     { 
      ModelState["StepTwoData"].Errors.Remove(error); 
     } 

最後我們將模型保存一次到數據存儲。這也阻止了啓動向導的用戶,但沒有完成它不將不完整的數據保存到數據庫。

我希望你發現這個實現嚮導的方法比任何前面提到的方法更容易使用和維護。

感謝您的閱讀。