使用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类继承的另一个控制器?

使用Umbraco中的RenderMvcController进行POST数据

如果要以这种方式发布表单,则需要两个控制器。一个用于从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" });
    }
}