代码之家  ›  专栏  ›  技术社区  ›  André Miranda

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

  •  11
  • André Miranda  · 技术社区  · 16 年前

    是可以做的 邮递 从控制器“产品”中的操作“保存”到控制器“类别”中的操作“全部保存”??

    并将FormCollection作为参数传递

    5 回复  |  直到 14 年前
        1
  •  8
  •   Amitabh    13 年前

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

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

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

    TempData["Model"] = Model;
    RedirectToAction("SaveAll", "Category");
    
        2
  •  5
  •   Robert Harvey    16 年前

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

        3
  •  5
  •   Neil T.    16 年前
    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。

        4
  •  2
  •   3Dave    16 年前

    自从 POST 是HTTP请求的动词,只有在 .Save() 方法启动到相应的 .SaveAll() ,(就像 http://..../Category/SaveAll )作为请求的一部分路由并传递表单集合。这太傻了,不推荐, 因为这会破坏你对这个控制器进行单元测试的能力 .

    但是,如果你想打电话 .SaveAll() 并将其呈现的结果返回给客户机,您可以使用 .RenderAction() 并传递 .Save() 作为参数。

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

    public ActionResult Save(MyModel m)
    {
        Category cat = new Category();
    
        return cat.SaveAll(m);
    }
    

    但是,您必须从该调用中获取结果,并确保结果视图对其进行了正确处理。

    如果这正是您要做的,那么值得注意的是,您应该真正拥有 .SaveAll() 方法,该方法将执行保存操作分离到专用业务逻辑层,而不是驻留在控制器中。理论上,所有这些功能都应该可以在不同的控制器中使用,或者可以在其他应用程序中包含的库中使用。

        5
  •  0
  •   Maheshwari Kahar    9 年前

    return RedirectToAction(“ViewService”,“Admin”)

    这里,“ViewService”是一个操作名,“Admin”是控制器名