使用Umbraco中的RenderMvcController进行POST数据
本文关键字:POST 数据 进行 RenderMvcController Umbraco 中的 使用 | 更新日期: 2023-09-27 18:19:41
我在Umbraco
中设置了一个文档类型,并创建了一个自定义控制器&此文档类型的模型。
自定义控制器继承自:RenderMvcController
类,视图通过@inherits Umbraco.Web.Mvc.UmbracoViewPage<com.something.model>
继承模型
这一切都适用于任何HttpGet请求。然而,一旦我想使用@using (Html.BeginUmbracoForm("SomeAction", "SomeController", null, new { @class = "some-class" }))
将表格张贴回控制器
我收到以下错误消息:在控制器名称SomeController 的RouteTable中找不到Surface控制器路由
从我能找到的所有文档中,当涉及到表单帖子时,它总是提到SurfaceControllers。有没有办法更改路由,使其发布到我的自定义控制器,而不是从SurfaceController
类继承的另一个控制器?
如果要以这种方式发布表单,则需要两个控制器。一个用于从MvcRenderController
继承的文档类型(正如您已经拥有的),另一个用于继承自SurfaceController
的文档类型。
表面控制器只需要一个POST操作即可完成以下操作之一:
// e.g. if modelstate is invalid
return CurrentUmbracoPage();
// redirecting back to original page after a successful post
return RedirectToCurrentUmbracoPage();
// Redirecting to another page after a successful post
return RedirectToUmbracoPage(12345)
这是从这里的文档中获取的:http://our.umbraco.org/documentation/Reference/Templating/Mvc/forms
严格地说,在这种情况下,初始文档类型控制器是不必要的,因为它在表单的帖子中不起作用
如果你想直接发布到自定义控制器,那么你不应该使用Html.BeginUmbracoForm
,你应该直接发布到当前的URL。这里的复杂之处在于,将模型绑定为后期操作的参数有点棘手。您的视图模型必须以以下方式从RenderModel
继承:
public class BaseModel : RenderModel
{
public BaseModel() :
base(UmbracoContext.Current.PublishedContentRequest.PublishedContent) { }
}
根据http://our.umbraco.org/forum/developers/api-questions/38662-(v6)-Could-not-find-a-Surface-controller-route-error?p=0,
SomeController
需要从SurfaceController
继承,而不是从RenderMvcController
继承。
或者,你可以创建一条专用路线,并将其直接指向你的控制器:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute("someController", "some/someAction",
new { controller = "Some", action = "SomeAction" });
}
}