gpt4 book ai didi

c# - 在 Umbraco 中使用 RenderMvcController 发布数据

转载 作者:行者123 更新时间:2023-11-30 15:28:34 29 4
gpt4 key购买 nike

我在 Umbraco 中设置了文档类型,并为此文档类型创建了自定义 Controller 和模型。

自定义 Controller 继承自:RenderMvcController类和 View 通过 @inherits Umbraco.Web.Mvc.UmbracoViewPage<com.something.model> 继承模型

这一切都适用于任何 HttpGet 请求。但是,只要我想使用@using (Html.BeginUmbracoForm("SomeAction", "SomeController", null, new { @class = "some-class" })) 将表单发回 Controller

我收到以下错误消息:无法在 Controller 名称 SomeController 的 RouteTable 中找到 Surface Controller 路由

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

最佳答案

如果要以这种方式发布表单,则需要两个 Controller 。一个用于从 MvcRenderController 继承的文档类型(正如您已经拥有的那样),另一个用于从 SurfaceController 继承。

表面 Controller 只需要一个执行以下操作之一的 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

严格来说,初始文档类型 Controller 在这种情况下不是必需的,因为它不会在表单的 post 中发挥作用。

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

public class BaseModel : RenderModel
{
public BaseModel() :
base(UmbracoContext.Current.PublishedContentRequest.PublishedContent) { }
}

关于c# - 在 Umbraco 中使用 RenderMvcController 发布数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25549252/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com