重定向至发送请求的操作

本文关键字:操作 请求 重定向 | 更新日期: 2023-09-27 18:32:22

>我有一个控制器"合同"和3个GET方法:"全部","焦点",其中包含网格和用于编辑的"编辑",以及一个POST方法:"编辑"。用户可以使用按钮从任何网格访问"编辑"。但是在执行 POST 后,我想将它们重定向到发送请求的操作。例如:

  1. 打开"焦点"网格
  2. 选择行
  3. 点击的编辑
  4. 进行更改,然后点击保存
  5. 最后重定向到"焦点"网格(!

  1. 打开"全部"网格
  2. 选择行
  3. 点击的编辑
  4. 进行更改,然后点击保存
  5. 最后重定向到"全部"网格(!

重定向至发送请求的操作

public ActionResul All()
{
  var items=dbContext.Items;
  return View("All",items);
}

All视图中,您将拥有包含数据的网格。从网格中选择一条记录并单击"编辑"将转到"编辑"的第二个操作方法。

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

@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)

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

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 操作方法中处理它。检查"发件人"属性值,并决定保存后重定向到的位置

[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 或编辑/焦点/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 }
      );