是否可以从控制器“产品”中的操作“保存”执行发布到控制器“类别”中的操作“SaveAll”??
并且还将FormCollection作为参数传递
答案 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"是一个行动名称和"管理员"是控制器名称