Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Umbraco请求上下文中的MVC ActionLink?_Asp.net Mvc_Umbraco_Actionlink - Fatal编程技术网

Asp.net mvc Umbraco请求上下文中的MVC ActionLink?

Asp.net mvc Umbraco请求上下文中的MVC ActionLink?,asp.net-mvc,umbraco,actionlink,Asp.net Mvc,Umbraco,Actionlink,我目前正在使用Umbraco 6.1.6和一些mvc视图和控制器。 我尝试做的是以下几点: 在我的razor视图中,我使用以下行创建actionlink: @Html.ActionLink("Klik to search...", "Search", "Search", new { SearchText = "searchterm" }, null) actionlink触发SearchController(是一个SurfaceController)的搜索方法: 当我在Html.BeginUm

我目前正在使用Umbraco 6.1.6和一些mvc视图和控制器。 我尝试做的是以下几点:

在我的razor视图中,我使用以下行创建actionlink:

@Html.ActionLink("Klik to search...", "Search", "Search", new { SearchText = "searchterm" }, null)
actionlink触发SearchController(是一个SurfaceController)的搜索方法:

当我在Html.BeginUmbracoForm中使用文本框和提交按钮时,效果很好,但当我使用Html.ActionLink时,重定向到当前Umbraco页面会引发异常(在路由值中找不到Umbraco路由定义,请求必须在Umbraco请求的上下文中发出)并且结果页不使用指定的样式模板

我如何强制在Umbraco请求的上下文中创建ActionLink? 这会像其他Umbraco页面一样恢复样式吗


谢谢你抽出时间

首先,您不应该像搜索页面那样使用曲面控制器渲染页面。相反,它们应该用于输出页面组件,例如搜索结果

其次,您可以在搜索页面中使用从
RenderMvcController
继承的控制器


最后,您不能真正使用
Html.ActionLink
来检索Umbraco发布的页面的URL。请参阅以解释原因。相反,您需要使用Umbraco内容缓存,换言之,在内容对象树中查找搜索页面,例如
@Model.content.祖先(1).后代(“SearchPage”).First().Url
或类似内容。

我认为您的搜索实际上是一个操作,而不是指向操作的链接

在您的控制器中,我们应该看到这一点

//This is to display the actual search form
[ChildActionOnly]
public ActionResult Search()
{
    return PartialView("_SearchForm");
}

//This is to display the result of the search
[HttpPost]
[NotChildAction]
public ActionResult Search(string SearchText)
{
    if (String.IsNullOrEmpty(SearchText))
    {
        return CurrentUmbracoPage();
    }
    SearchResult result = SearchManager.Instance.Search(SearchText);
    return PartialView("_SearchResults", result);
}
在umbraco视图中,应使用Html.Action调用此表单

@Html.Action("Search", "MySearchSurface")

我不太同意最后一点。我确信Html.ActionLink对于SurfaceController非常有效。因为surfacecontroller是基于MVC的。因此,它应该起作用。如果不是的话,肖普遗漏了什么或者香农搞砸了什么。他们确实为表面控制者工作。我没说他们没有。我说过,你不能使用
Html.ActionLink
检索已发布页面的URL。它确实有效,但页面不应用布局。我只是得到一个普通的HTML页面。
@Html.Action("Search", "MySearchSurface")