使用Umbraco中的RenderMvcController POST数据

时间:2014-08-28 12:49:59

标签: c# asp.net-mvc umbraco

我在Umbraco中设置了一个文档类型,并创建了一个自定义控制器&此文档类型的模型。

自定义控制器继承自:RenderMvcController类,视图通过@inherits Umbraco.Web.Mvc.UmbracoViewPage<com.something.model>继承模型

这一切都适用于任何HttpGet请求。但是,只要我想使用@using (Html.BeginUmbracoForm("SomeAction", "SomeController", null, new { @class = "some-class" }))

将表单发回控制器

我收到以下错误消息:无法在RouteTable中找到控制器名称SomeController的Surface控制器路径

从我能够找到的所有文档中,它总是在表单帖子中引用SurfaceControllers。有没有办法改变路由,以便它发布到我的自定义控制器,而不是从SurfaceController类继承的另一个控制器?

2 个答案:

答案 0 :(得分:4)

如果您要以这种方式发布表单,则需要两个控制器。一个用于继承自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,您应该直接发布到当前网址。这里的复杂性是将模型绑定为post动作的参数然后有点棘手。您的视图模型必须以下列方式从RenderModel继承:

public class BaseModel : RenderModel
{
    public BaseModel() :
      base(UmbracoContext.Current.PublishedContentRequest.PublishedContent) { }
}

答案 1 :(得分:0)

根据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" });
    }
}