2014-02-14 67 views
0

繼承時,我已成立了一把umbraco文檔類型,並創造了該文檔類型的定製控制器&模型。一把umbraco,POST從RenderMVCController

定製控制從繼承: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類繼承?

謝謝。

回答

2

您需要繼承繼承您ControllerUmbraco.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 
} 

現在最後一步是定義你的路線在RouteConfig.cs在App_Start文件夾

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

嘗試使用此爲您的表單:

@using (Html.BeginUmbracoForm("Post", "ControllerNameWithoutController", System.Web.Mvc.FormMethod.Post, new { @class = "YourclassName" })) 

而且您的控制器必須從SurfaceController

public class YourControllerNameController : SurfaceController 
0

我相信這是一個很好的解決方案,以允許獲取併發布動詞給同一個控制器。正如你不能同時從RenderMvcController和SurfaceController繼承然後我發現這個更好的,它也允許用於填充表單元素使用RenderModel的。

public class ContactUsController : SurfaceController, IRenderController 
+0

還通過視圖模型回(如在正常的MVC),你需要這樣的事情在你的模型 公共ContactUsViewModel():這個(新UmbracoHelper(UmbracoContext.Current).TypedContent(UmbracoContext。 Current.PageId)){} 公共ContactUsViewModel(IPublishedContent含量):基座(內容){} – Netferret