重定向到发送请求的操作

时间:2012-04-27 12:00:11

标签: c# asp.net-mvc

我有一个控制器“Contracts”和3个GET方法:“All”,“Focus”,其中包含网格,“Edit”用于编辑,还有一个POST方法:“Edit”。 用户可以使用按钮从任何网格访问“编辑”。但是在执行POST之后,我想将它们重定向到发送请求的操作。 例如:

  1. 打开“焦点”网格
  2. 选择行
  3. 点击修改
  4. 进行更改,然后点击保存
  5. 最终重定向到“焦点”网格(!)
    1. 打开“全部”网格
    2. 选择行
    3. 点击修改
    4. 进行更改,然后点击保存
    5. 最终重定向到“全部”网格(!)

2 个答案:

答案 0 :(得分:1)

public ActionResul All()
{
  var items=dbContext.Items;
  return View("All",items);
}
<{1>}在All视图中,您将获得包含数据的网格。从网格中选择一条记录并单击编辑将转到第二个用于编辑的Action方法。

在此处调用编辑方法时,您可以传递一些标记。您可以在构建像这样的编辑链接时添加

@Html.ActionLink("Edit","Edit","Item",new { @id=item.Id, @from="all"},null)

所以我的编辑会有一个查询字符串键“from”,其值为“all

同样,在Focus的视图中,您可以传递不同的值

@Html.ActionLink("Edit","Edit","Item",new { @id=item.Id, @from="focus"},null)

现在编辑操作方法,您读取参数并将其设置为编辑视图模型的属性值。您可能希望将此属性添加到ViewModel。

public ActionResult Edit(int id,string from)
{
  EditItemViewModel item=GetItem(id);
  item.From=from;      
  return View(item);
}

此视图将包含编辑表单。我们将From的值保留在表单元素中,以便我们可以在表单帖子中使用它。

@model EditItemViewModel 

@using(Html.BeginForm())
{
   @Html.HiddenFor(m => m.Id);
   @Html.TextBoxFor(m => m.ItemName)
   @Html.TextBoxFor(m => m.ItemDesc)
   @Html.HiddenFor(m => m.From)
   <input type="submit" value="Update" />
}

用户可以再次编辑和提交。你在HttpPost Edit动作方法中处理它。检查From属性值并确定保存后重定向的位置

[HttpPost]
public ActionResult Edit(EditItemViewModel model)
{
  if(ModelState.IsValid)
  {
    //Save data 
   if(model.From=="all")
       return RedirectToAction("All");
   else
       return RedirectToAction("Focus");
  }
  return View(model);

}

答案 1 :(得分:0)

我认为您的帖子编辑可以像这样

点击具有(编辑/全部/ 1或编辑/焦点/ 2)的网格后,您可以重定向到此

   public ActionResult Edit(int id, yourviewmodel viewmodel,string YourFilter)
   {

           return RedirectToAction(YourFilter);
   }

并且在global.asax中,您可以为编辑提交

设置这样的路线
    routes.MapRoute(
            "filters",
            "All",
            new { controller = "Contracts", action = "All" }
        ); 

       routes.MapRoute(
            "filters1",
            "focus",
            new { controller = "Contracts", action = "focus" }
        ); 

编辑单击

      routes.MapRoute(
          "EditFilter",
          "Edit/{YourFilter}/{id}",
          new { controller = "Contract", action = "Edit",YourFilter = UrlParameter.Optional,id = UrlParameter.Optional }
      );