在 Umbraco 中使用 RenderMvcController POST 数据

Dim*_*ple 3 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" }))

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

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

Dig*_*ift 5

如果要以这种方式发布表单,则需要两个控制器。一个用于继承自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)
Run Code Online (Sandbox Code Playgroud)

这取自此处的文档:http : //our.umbraco.org/documentation/Reference/Templating/Mvc/forms

严格来说,初始文档类型控制器在这种情况下不是必需的,因为它在表单的发布中没有作用。

如果你想直接发布到自定义控制器,那么你不应该使用Html.BeginUmbracoForm,你应该直接发布到当前的 URL。这里的复杂之处在于,将模型绑定为后期操作的参数有点棘手。您的视图模型必须RenderModel通过以下方式继承:

public class BaseModel : RenderModel
{
    public BaseModel() :
      base(UmbracoContext.Current.PublishedContentRequest.PublishedContent) { }
}
Run Code Online (Sandbox Code Playgroud)