ASP.Net MVC - 从一个控制器发布到另一个控制器(行动到行动)

时间:2010-04-30 16:30:37

标签: asp.net-mvc post

是否可以从控制器“产品”中的操作“保存”执行发布到控制器“类别”中的操作“SaveAll”??

并且还将FormCollection作为参数传递

5 个答案:

答案 0 :(得分:8)

您可以在视图中声明这样的表单,并指定您希望的控制器或操作。

Html.BeginForm("SaveAll", "Category", FormMethod.Post);

如果您在控制器中,那么您可以使用。

TempData["Model"] = Model;
RedirectToAction("SaveAll", "Category");

答案 1 :(得分:5)

我要么直接从产品控制器Save方法更新存储库中的类别,要么在自己的方法中重构Save Categories功能,并从两种控制器方法中调用它。

答案 2 :(得分:5)

public class Product : Controller
{
    ...
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Save(FormCollection productValues)
    {
        ...
        RedirectToAction("SaveAll", "Category", new { formValues = productValues });
    }
    ...
}

public class Category : Controller
{
    ...
    public ActionResult SaveAll(FormCollection formValues)
    {
        ...
    }
}

假设您正在产品的上下文中执行POST。

答案 3 :(得分:2)

由于POST是HTTP请求的动词,因此只有.Save()方法启动与适当.SaveAll()的HTTP环回连接时才会有意义(如编写),(如{ {1}})路由并传递表单集合作为请求的一部分。这很愚蠢,不推荐使用,因为这会破坏您对该控制器进行单元测试的能力

但是,如果您要调用http://..../Category/SaveAll并将其呈现的结果返回给客户端,则可以使用.SaveAll()并传递.RenderAction()收到的模型或表单集合}作为参数。

或者,在服务器端,只需实例化Category控制器并调用其.SaveAll()方法,再次将.Save()收到的模型作为参数传递。

.Save()

但是,您必须从该调用中获取结果,并确保由生成的视图正确处理。

如果您正在尝试这样做,那么值得注意的是,您应该将执行保存的public ActionResult Save(MyModel m) { Category cat = new Category(); return cat.SaveAll(m); } 方法的代码分离为专用业务逻辑层而不是生活在控制器中。理论上,所有这些功能都可用于不同的控制器,或者可以包含在其他应用程序中的库中。

答案 4 :(得分:0)

返回RedirectToAction(" ViewService"," Admin")

在这里," ViewService"是一个行动名称和"管理员"是控制器名称