在控制器 "Product" 的操作 "Save" 中向控制器 "Category" 的操作 "SaveAll" 发送一个post请求是否可行?同时将FormCollection作为参数传递。
在控制器 "Product" 的操作 "Save" 中向控制器 "Category" 的操作 "SaveAll" 发送一个post请求是否可行?同时将FormCollection作为参数传递。
Html.BeginForm("SaveAll", "Category", FormMethod.Post);
TempData["Model"] = Model;
RedirectToAction("SaveAll", "Category");
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)
{
...
}
}
我建议你可以直接在产品控制器的Save方法中更新存储库中的分类,或者将保存分类的功能重构为自己的方法,并从两个控制器方法中调用该方法。
POST
是HTTP请求的动词,因此只有在.Save()
方法启动HTTP回环连接到适当的.SaveAll()
(例如http://..../Category/SaveAll
)路由并将表单集合作为请求的一部分传递时,这才有意义(如所写)。 这很傻,并且不推荐,因为这会破坏您对此控制器进行单元测试的能力。.SaveAll()
并将其呈现的结果返回给客户端,则可以使用.RenderAction()
,并将接收到的模型或表单集合作为参数传递给.Save()
。.Save()
接收的模型作为参数传递。public ActionResult Save(MyModel m)
{
Category cat = new Category();
return cat.SaveAll(m);
}
.SaveAll()
方法的代码分离到专门的业务逻辑层中,而不是放在控制器中。理论上,所有这些功能都应该可用于不同的控制器或库中,可以包含在其他应用程序中。将以下代码放入您的Product
控制器中:
return RedirectToAction("SaveAll", "Category")
"SaveAll"
是一个操作名称(Action Name),"Category"
是控制器名称(Controller Name)。
用户将被重定向到SaveAll
操作(即,该方法将被调用)。