我在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
类继承的另一个控制器?
答案 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)
SomeController
需要继承SurfaceController
,而不是RenderMvcController
。
或者,您可以创建专用路线并将其直接指向您的控制器:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute("someController", "some/someAction",
new { controller = "Some", action = "SomeAction" });
}
}