Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在asp.net MVC 5中创建表单_C#_Asp.net Mvc - Fatal编程技术网

C# 如何在asp.net MVC 5中创建表单

C# 如何在asp.net MVC 5中创建表单,c#,asp.net-mvc,C#,Asp.net Mvc,我已经习惯了web表单,但我正在切换到MVC5,并且对创建多步骤应用程序表单有疑问 此表单就像一个向导,然后在最后显示每个步骤中输入的信息,然后提交 在.cshtml中使用html表单编写这篇文章更容易还是在控制器中完成这一切更容易 谢谢您的所有表单信息都将保存在.cshtml文件中,如下所示: @using (Html.BeginForm("Controller Action Method", "Controller Name", FormMethod.Post, new { id = "Fo

我已经习惯了web表单,但我正在切换到MVC5,并且对创建多步骤应用程序表单有疑问

此表单就像一个向导,然后在最后显示每个步骤中输入的信息,然后提交

在.cshtml中使用html表单编写这篇文章更容易还是在控制器中完成这一切更容易


谢谢

您的所有表单信息都将保存在.cshtml文件中,如下所示:

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

然后,您只需添加一个提交按钮,将表单提交给控制器进行处理。

MVC,顾名思义,它有一个模型、一个视图和一个控制器。要创建表单,需要设置一个类作为模型,该类包含需要在特定视图中使用的属性。这与实体不同,实体是与数据库中的表相对应的类。您有时可以使用实体作为模型,但特别是在多步骤表单的情况下,您不希望将数据保留到最后,这意味着它们需要分开

这就引出了视图模型的主题,它实际上来自另一种称为MVVM的不同模式。无论如何,这些视图的模型将是一系列视图模型,其中仅包含特定步骤需要收集的信息。最后,通过创建实体的实例并将每个视图模型的属性值映射到实体,将所有收集的数据拼凑在一起。然后,您将保存实体

现在,就在请求之间持久化收集的数据而言,这就是会话的作用所在。您只需将每个发布的视图模型添加到
会话
对象中,然后在最后,从
会话
对象中获取所有模型以创建实体

因此,每个POST操作都有如下内容:

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

    // errors
    return View(model);
}
然后,您的最后一个后期操作:

[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文件。最佳实践是遵循模型-视图-控制器模式,该模式将标记和控制器分开。别忘了检查这个,我会检查的。到目前为止,所有这些对我来说都是陌生的,但希望我能尽快弄明白。谢谢你。我得试一试,看看结果如何。我以前从未使用过MVC,所以我觉得自己又是一个初学者了。