我有许多创建和删除部分视图,我想通过从其他视图调用来重用它们。问题是这需要我将返回路由和routeValues传递给create和delete控制器方法,以便他们可以在成功时生成适当的重定向回原始视图。我创建了一些扩展和帮助以保持这种整洁,但这样解决问题似乎很复杂。我错过了什么吗?当(重定向)控制器,动作和路由值可以变化时,是否有一种简单的方法可以使用RedirectToAction?
清晰示例:产品AZ索引视图和产品 SomeCategory 索引视图都有一个删除按钮,调用删除视图(显示“你真的想要删除”消息)一个“Really Delete”按钮,它回发到产品控制器中的实际(POST)Delete方法。一旦产品被删除,我们需要返回一个RedirectToAction,但由于'AZ Index'和' SomeCategory Index'视图都有一个Delete链接,我们必须动态地将action,controller和routeValues设置为视图最初称为删除。
这并不困难,但是在处理删除的所有控制器和视图周围传递重定向值是非常复杂的,并且有理由认为必须有一种更为理智的方法来执行此操作。
答案 0 :(得分:1)
在Delete操作中查询Request.UrlReferrer(显示确认视图的那个)并将引用者详细信息存储在临时数据中。
在删除操作中,从临时数据中读取引用者详细信息,并使用重定向(字符串)重载重定向到将用户引用到原始删除请求的URL。
答案 1 :(得分:0)
您考虑使用RedirectToRoute
吗?RedirectToRoute(new {controller = "MyController", Action = "Create", id = ""});
答案 2 :(得分:0)
考虑不使用“删除确认”的整个视图。使用Html助手和javascript'confirm()'。即。使用帮助器呈现帖子表单并删除链接,这样当用户点击“删除”时,他们会得到一个js确认提示“确定要删除?”并且确定函数“返回true”并调用要删除的表单上的提交。然后删除操作只是重定向到通常的任何地方。我希望您对要删除的不同对象使用不同的删除操作。如果您的计划是要进行一般删除操作,那就更难了(而不是推荐的IMO)。
我的删除助手包含很多内容,但删除部分看起来像这样(带剪辑):
string deleteLink = String.Format(@"<a onclick=""deleteRecord({0})"" href='#'>Delete</a><form id='deleteForm' method='post' action='" +
routeRelativePath + "/" + actionPrefix + "Delete/" + model.ID +
@"'></form>", model.ID);
..它(帮助者)也附加了一些js:
function deleteRecord(recordId) {
if(confirm('Are you sure you want to delete this {friendlyModelName}?\nNOTE: There is no Undo.')) {
// Perform delete
var action = "{routeRelativePath}/{actionPrefix}Delete/" + recordId;
// jQuery non-AJAX POST version
$("form#deleteForm").submit();
}
}
..你可以看到帮助者创建了删除链接,其中包含了路径和ID等的所有参数.js只是执行“确认”部分,然后提交你可以看到的由帮助者创建的微小。
[对不起,如果样本不是100%完成 - 我必须删除很多东西:例如帮助程序和附加的js有许多不同的模式,以便支持ajax POST等]