我在Umbraco中设置了一个文档类型,并创建了一个自定义控制器&此文档类型的模型。
自定义控制器继承自:RenderMvcController
类,视图通过@inherits Umbraco.Web.Mvc.UmbracoViewPage<com.something.model>
继承模型
这一切都适用于任何HttpGet
个请求。但是,只要我想使用@using (Html.BeginUmbracoForm("SomeAction", "SomeController", null, new { @class = "some-class" }))
我收到以下错误消息:Could not find a Surface controller route in the RouteTable for controller name SomeController
从我能够找到的所有文档中,它总是在表单帖子中引用SurfaceControllers。有没有办法改变路由,以便它发布到我的自定义控制器,而不是从SurfaceController
类继承的另一个控制器?
感谢。
答案 0 :(得分:2)
您需要从Controller
Umbraco.Web.Mvc.SurfaceController
您可以在控制器中执行此操作:
public class DefaultController : Umbraco.Web.Mvc.SurfaceController
{
Public ActionResult YourMethod()
{
return CurrentUmbracoPage();
}
}
在视图中,您可以将表单称为:
@using (Html.BeginUmbracoForm("YourMethod", "Default",new { @class = "YourclassName" }))
{
//DO Something
}
现在最后一步是在App_Start文件夹
中的RouteConfig.cs中定义路由 public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Default", action = "YourMethod", id = UrlParameter.Optional }
);
}
}
答案 1 :(得分:1)
尝试将此用于您的表单:
@using (Html.BeginUmbracoForm("Post", "ControllerNameWithoutController", System.Web.Mvc.FormMethod.Post, new { @class = "YourclassName" }))
此外,您的控制器必须继承自SurfaceController
public class YourControllerNameController : SurfaceController
答案 2 :(得分:0)
我相信这是一个很好的解决方案,允许获取和发布动词到同一个控制器。由于你无法从RenderMvcController和SurfaceController继承,所以我发现它更好,它还允许使用RenderModel来填充表单元素。
public class ContactUsController : SurfaceController, IRenderController