簡體   English   中英

如何在asp.net MVC 5中創建表單

[英]How do I create a form in asp.net MVC 5

我已經習慣了網絡表單,但我轉而使用MVC 5並且有關於創建多步驟申請表的問題。

此表單就像一個向導,然后將顯示在每個步驟中輸入的信息,然后提交。

是否更容易在.cshtml中使用html表單編寫或在控制器中完成所有操作?

謝謝

顧名思義,MVC有一個模型,一個視圖和一個控制器。 要創建表單,請設置一個將充當模型的類,其中包含需要在特定視圖中使用的屬性。 這與您的實體不同,后者對應於數據庫中的表。 有時您可以將實體用作模型,但特別是在多步形式的情況下,您不希望將數據持久到結束,這意味着它們需要分開。

這將我們帶到視圖模型的主題,它實際上來自另一種稱為MVVM的模式。 無論如何,這些視圖的模型將是一系列視圖模型,其中僅包含特定步驟需要收集的信息。 最后,您將通過創建實體實例並將每個視圖模型中的屬性值映射到它來將所有收集的數據組合在一起。 然后,您將保存實體。

現在,只要在請求之間保持收集的數據,就是會話進入的地方。您只需將每個發布的視圖模型添加到Session對象中,然后最后從Session對象中獲取所有這些模型以創建你的實體。

因此,每個POST操作都將具有以下內容:

[HttpPost]
public ActionResult Step1(Step1ViewModel model)
{
    if (ModelState.IsValid)
    {
        Session["Step1"] = model;
        return RedirectToAction("Step2");
    }

    // errors
    return View(model);
}

然后,你最后的POST動作:

[HttpPost]
public ActionResult StepFinal(StepFinalViewModel)
{
    if (ModelState.IsValid)
    {
        var myEntity = new MyEntity();

        var step1 = Session['Step1'] as Step1ViewModel;
        myEntity.SomeField = step1.SomeField;
        // ... repeat for field in view model, then for each step


        db.MyEntities.Add(myEntity);
        db.SaveChanges();

        Session.Remove('Step1');
        // repeat for each step in session

        return RedirectToAction("Success");
    }

    // errors
    return View(model);
}

您的所有表單信息都將在.cshtml文件中,如下所示:

@using (Html.BeginForm("Controller Action Method", "Controller Name", FormMethod.Post, new { id = "Form Name" }))
{
// Form Elements here
}

然后,您只需添加一個提交按鈕,將表單提交給您的Controller進行處理。

暫無
暫無

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

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