Umbraco,从RenderMVCController继承时的POST

时间:2014-02-14 04:47:37

标签: 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" }))

将表单发回控制器

我收到以下错误消息:Could not find a Surface controller route in the RouteTable for controller name SomeController

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

感谢。

3 个答案:

答案 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
相关问题