如何在MVC3中将一个视图表单传输到另一个视图?

时间:2012-03-14 21:14:50

标签: c# asp.net-mvc asp.net-mvc-3 model-view-controller .net-4.0

任何人都可以帮助在MVC3 / C#中将表单从一个视图转移到另一个视图吗?

以下是该方案:

1)我创建了一个页面,我有大约6个字段供用户输入,一旦用户提交该字段,它就会将它们重定向到评论页面。

2)一旦用户进入评论页面,他在创建页面中输入的信息就会出现在那里(供用户确认)。

3)评论页面上会有一个编辑按钮,所以如果用户点击编辑按钮,那么他应该回到他输入所有信息的创建页面,这样他就可以再次更新它们。

我们可以使用ViewData / ViewBag或部分视图来处理这种情况吗?我不知道该怎么做。

2 个答案:

答案 0 :(得分:2)

您应该在Models文件夹中创建一个类,让我们将其命名为MyViewModel,然后您将在该类中定义用户需要编辑的所有6个属性。 在创建视图中,您将在定义的表单元素中显示所有输入字段,以回发到审核操作。您的观点的重要部分将是:

@model MyViewModel
@using (Html.BeginForm("Review", "MyController"))
{
   //here there's your input field
   @Html.TextBoxFor(m => m.prop1)
   // and so on
}

在MyController类中,您将Review方法定义如下

public ActionResult Review(MyModel mm) 
{
    if (ModelState.IsValid)
    {
        return View(mm);
    } else return RedirectToAction("Create");
}

最后,在您的评论视图中,您将拥有:

 @model MyViewModel
 //show up all the field to be reviewed
 @Html.DisplayFor(m=>m.prop1)
 //and so on
 // now a form to pastback again all the data to the edit page
 @using (Html.BeginForm("Edit", "MyController"))
 {
   //here there's your hidden field
   @Html.HiddenFor(m => m.prop1)
   // and so on
   <input type="submit" value="Re-edit the fields"/>
 }

您的控制器类MyController将具有以下代码:

public class ViaggioController : Controller
{
public ActionResult Create() 
{
    var emptyModel = new MyViewModel();
    return RedirectToAction("Edit", new { mm = emptyModel });
}
public ActionResult Edit(MyViewModel mm) 
{    
    return View(mm);
}

public ActionResult Review(MyViewModel mm) 
{
    if (ModelState.IsValid)
    {
        return View(mm);
    } 
    else 
        return RedirectToAction("Create");
}
}

答案 1 :(得分:0)

我看到你正在使用Asp.Net MVC,所以我假设你的Create View由一个Model对象支持,该对象包含用户输入的6个字段,并且你使用内置的Model Validation?如果是这样,您需要做的就是:

  1. 在创建控制器Httpost操作的表单发布后,模型状态有效,重定向到Review Controller,使用TempData []将相同的Model对象传递给它。
  2. 您的Review Controller将提供View以显示Model对象的内容。在该视图上实现编辑链接,该链接将调用Create Controller。您需要某种方法将相同的模型传递回Create Controller。您可以使用TempData []或可验证的会话来执行此操作。我不认为您可以使用ActionLink帮助程序传递复杂对象,即您的模型。
  3. Create Crontroller Httpost Action将获取模型并提供视图供用户编辑其数据。