2

我不明白,我有这个代码:

return JavaScript(string.Format(
   "window.location = '{0}'",
   UrlHelper.GenerateContentUrl("Index", this.HttpContext)));

该代码位于两个可与 POST 一起使用的非常通用的“创建”方法中。这两种方法中的每一种都在不同的控制器类中。

现在对于使用 URL 调用的方法Ahttp://localhost:56688/Businessrule/Create,当代码执行时,我被重定向到http://localhost:56688/Index

但是对于从我调用的方法Bhttp://localhost:56688/FormulaField/Create ,我被重定向到http://localhost:56688/FormulaField/Index.

...真的我不明白,微软文档并没有多大帮助http://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.generatecontenturl.aspx(现在,恕我直言,这是一个非常糟糕的方法文档)

4

2 回答 2

2

听起来您缺少控制器名称。显然,您将被重定向到同一控制器中的 Index 操作。

这就是 MVC Route 引擎所做的,如果他没有找到控制器名称,他会分配一个默认值,在这种情况下,动作已经执行的控制器来自 wwitch。

尝试类似:

UrlHelper.GenerateContentUrl(@"~\ControllerName\Index", this.HttpContext)
于 2012-08-28T21:11:43.563 回答
0

因此,正如asawyer所指出的,它的工作原理由代码本身回答:

https://github.com/aspnet/AspNetWebStack/blob/master/src/System.Web.Mvc/UrlHelper.cs

事实证明,如果您传递的字符串以“~”开头,则该方法将调用 PathHelpers.GenerateClientUrl,但如果字符串不以“~”开头,则它只会返回不变的相同字符串。

但我仍然不明白为什么我会得到不同的结果。无论如何,我似乎必须更接近传递给浏览器的原始响应......

于 2012-08-28T21:44:26.117 回答