我目前正在开发一个 Umbraco MVC 4 项目版本 6.0.5。该项目目前使用 Vega.USiteBuilder 在后台基于具有映射属性的强类型类构建适当的文档类型。因此,我所有的剃须刀文件都继承自 UmbracoTemplatePageBase
我遇到了一个路障,试图从剃刀文件中调用 HTTP GET。例如,具有多个字段的搜索表单要提交给控制器操作方法,使用 SurfaceController 使用 Html.BeginUmbracoForm。
我的 Html.BeginUmbracoForm 看起来像这样
@using (Html.BeginUmbracoForm("FindTyres", "TyreSearch"))
{
// Couple of filter fields
}
我基本上有一个场景,我想从 Umbraco 外部的外部数据库(Umbraco 数据库外部)检索一些记录,并将自定义视图模型中的结果返回到我的 Umbraco 前端视图。一旦我的控制器和操作方法设置为从 SurfaceController 继承,然后编译它并提交搜索,我会在请求的 url 指定的位置找到 404 资源:/umbraco.RenderMVC。
这是我的代码片段:
public ActionResult FindTyres(string maker, string years, string models, string vehicles)
{
var tyreBdl = new Wheels.BDL.TyreBDL();
List<Tyre> tyres = tyreBdl.GetAllTyres();
tyres = tyres.Where(t => string.Equals(t.Maker, maker, StringComparison.OrdinalIgnoreCase)
&& string.Equals(t.Year, years, StringComparison.OrdinalIgnoreCase)
&& string.Equals(t.Model, models, StringComparison.OrdinalIgnoreCase)
&& string.Equals(t.Version, vehicles, StringComparison.OrdinalIgnoreCase)).ToList();
var tyreSearchViewModel = new TyreSearchViewModel
{
Tyres = tyres
};
ViewBag.TyreSearchViewModel = tyreSearchViewModel;
return CurrentUmbracoPage();
}
然后我求助于使用标准 MVC,Html.BeginForm(唯一的区别)。重复上述步骤并提交搜索,我收到以下 YSOD 错误。
使用 SurfaceController 表单时,只能在 Http POST 的上下文中使用 UmbracoPageResult
下面是 HTML BeginForm 的片段
@using (Html.BeginForm("FindTyres", "TyreSearch"))
{
// Couple of filter fields
}
我觉得我正在与 Umbraco 路线作斗争,以使我的控制器将自定义模型返回到剃刀文件。我用谷歌搜索了很多,试图弄清楚如何进行基本搜索以将自定义模型返回到我的 Umbraco 前端视图,直到我尝试创建自定义路线但这对我也不起作用。
我的控制器是否需要从特殊的 umbraco 控制器类继承才能返回自定义模型?我基本上喜欢调用 HTTP GET 请求(这是必须的),以便我的条件搜索字段正确反映在 url 的查询字符串中。例如,在点击搜索按钮时,我必须在地址浏览器栏中看到示例 url
http://[域名]/selecttyres.aspx/TyresSearch/FindTyresMake=ASIA&Years=1994&Models=ROCSTA&Vehicles=261
因此,我不能使用 Surface Controller,因为它将在 HTTP Post 的上下文中运行。
有没有我可以阅读更多关于 umbraco 控制器、路由和管道的好的资源材料。
我希望这个场景对你有意义。如果您有任何问题,请告诉我。我需要理解这个概念才能从这里继续我的项目,而且我确实有一个截止日期。