ASP .NET MVC - 如何将用户控件重定向到其调用的视图?

时间:2012-03-04 04:23:17

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-2

我有一个用户控件,可以在数据库中创建新记录。在创建新记录之后,我想将其重定向回其视图。这样做的目的是刷新视图,以便它可以显示新创建的记录。问题是用户控件可以存在于多个视图中,那么我怎么知道哪个视图是用户控件呢?这样我就能实现上述情况?谢谢,

RWendi

3 个答案:

答案 0 :(得分:2)

  

我有一个用户控件,可以在数据库中创建新记录。

不,它没有。它只是呈现HTML,而不是其他任何东西。

这是在数据库中创建新记录的控制器操作,因此这是重定向应该发生的地方。

接受模型/表单的 [HttpPost]操作应在保存完成后执行重定向。

E.g:

public ActionResult Save(SomeModel model)
{
   db.Save(model);
   return RedirectToAction("Index");
}

我假设您要刷新的“视图”是同一页面,无论用户控制器呈现在哪个页面上,因此上面的代码都没问题。

在旁注中,您不应该使用用户控件(例如partials)来渲染表单。

您应该使用编辑器模板。呈现表单(并指定要发布到哪个操作)的表示代码应该在视图中,而不是在用户控件中。

编辑 - 如何在视图上呈现表单的示例:

而不是在View上执行此操作:

@Html.Partial("_SomeModel")

这样做:

@using (Html.BeginForm()) {
   @Html.EditorFor(model => model.SomeModel)
}

将表单标记放在编辑器模板中。这里的关键是IMO,Views应该负责设置表单,而不是用户控件。

答案 1 :(得分:1)

有几种方法,

1)您可以使用this.Request.UrlReferrer.AbsoluteUri,它始终会为您提供网页的网址。

2)或者,你可以在PartialView中有一个隐藏属性,它将保存当前网址的值。 (@this.ViewContext.ParentActionViewContext.HttpContext.Request.UrlReferrer.AbsoluteUri) 但只有你使用@ Html.RenderAction。

在子操作中,您可以重定向到上述任一网址。 (第一种方法更好,适用于所有场景)

答案 2 :(得分:0)

我认为刷新是呈现用户控件视图的操作的责任。

您可以拥有在一个操作中完成插入的方案(或视图),然后将请求传递给显示新创建的记录的另一个操作(可能是列表)。

或者您可以使用其他方案,其中插入只是您要保存到数据库的一部分,刷新原始视图可能会导致数据丢失。

也许我所说的不是你现在的项目会发生什么,但是在给予用户控制权之前你应该考虑它应该考虑的事情。