UrlHelper.GenerateContentUrl如何工作?

时间:2012-08-28 20:59:18

标签: c# asp.net-mvc-3

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

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

代码在两个非常通用的内部"创建"与POST一起使用的方法。这两种方法中的每一种都在不同的控制器类中。

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

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

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

2 个答案:

答案 0 :(得分:2)

听起来像你错过了控制器名称。显然,您被重定向到同一控制器中的Index操作。

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

尝试类似:

UrlHelper.GenerateContentUrl(@"~\ControllerName\Index", this.HttpContext)

答案 1 :(得分:0)

因此,正如 asawyer 指出的那样,它的工作方式由代码本身来回答:

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

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

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