我有一个控制器“Contracts”和 3 个 GET 方法:“All”、“Focus”(包含网格)和“Edit”用于编辑,还有一个 POST 方法:“Edit”。用户可以使用按钮从任何网格访问编辑。但是在执行 POST 之后,我想将它们重定向到发送请求的操作。例如:
- 打开“焦点”网格
- 选择行
- 点击编辑
- 进行更改,然后单击保存
- 最后重定向到“焦点”网格(!)
或者
- 打开“全部”网格
- 选择行
- 点击编辑
- 进行更改,然后单击保存
- 最后重定向到“全部”网格(!)
我有一个控制器“Contracts”和 3 个 GET 方法:“All”、“Focus”(包含网格)和“Edit”用于编辑,还有一个 POST 方法:“Edit”。用户可以使用按钮从任何网格访问编辑。但是在执行 POST 之后,我想将它们重定向到发送请求的操作。例如:
或者
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)
现在是 Edit Action 方法,您读取参数并将其设置为我们的编辑视图模型的属性值。您可能希望将此属性添加到您的 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或编辑/焦点/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 }
);