我是ASP.NET MVC的新手,我希望这不是一个太愚蠢的问题。所以来了。
我有......
我的问题......
$.getJSON("../mycontroller/myaction/" + id, function(figure) {
// do something
});
这是我的 Global.asax 包含路由:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "myController", action = "Index", id = "" }
defaults
);
routes.MapRoute(
"Root",
"",
new { controller = "myController", action = "Index", id = "" }
);
}
protected void Application_Start()
{
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new MyApplicationWeb.LocalizationWebFormViewEngine());
RegisterRoutes(RouteTable.Routes);
//RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
}
有什么建议吗?我的第一个建议是使用以下区域:
"mysubfolder1/myappfolder/{controller}/{action}/{id}"
(但没有任何运气)
非常感谢你的帮助!
答案 0 :(得分:1)
我遇到类似的问题,内容没有正确加载,使用UrlHelper类能解决我的问题。此助手将为您的内容,链接等生成正确的URL。
<%=Url.Content("~/Content/Images/image.jpg")%>
<%=Url.Action("MyAction")%>
答案 1 :(得分:1)
对您的应用程序的每个请求都将被拆分为斜杠字符之间的URL标记。路线“{controller}/{action}/{id}
”将匹配域名后的网址的前三个部分。
因此,添加子文件夹会破坏您的应用程序,因为子文件夹将被解释为控制器参数。当你说你使用“”mysubfolder1 / myappfolder / {controller} / {action} / {id}“没有任何运气时,你的意思是什么?这将是一个适合你的简单方法。
当你说你的链接不起作用时,我猜你可能没有正确生成它们。您应该使用Url.Action
和Url.Content
方法在应用程序内正确生成链接 - 这可以防止它们在您移动文件夹和路由表时中断。
答案 2 :(得分:1)
... css文件,但没有像这样的资源 图像(在css文件中定义)和 没有jQuery的ajax调用类似于 / myController的/ myaction
您需要编辑任何和所有jQuery / CSS图像链接或URL。 ASP.NET MVC路由仅适用于传入的Web请求,并且由于您的css文件是静态的,因此使用background-image: url('../images/background.png')
引用的任何图像都将相对于css文件所在的文件夹。
正如其他答案所述,在任何View
(。ascx和.aspx文件)中,使用<%= Url.Action("ActionName") %>
根据您的路由生成正确的网址。同样,使用<%= Url.Content("~/folder/something.png") %>
为Web服务器上的任何内容生成链接(图像,css,js等)。
但是,你不能在.css和.js文件中使用它们,因为它们不是使用ASP.NET WebForms视图引擎解析的。
由于ASP.NET不负责提供.css
和.js
等静态文件,因此您需要对文件中的操作/控制器的URL进行硬编码。
另一种方法,即可能是凌乱的方法,是将字符串放在.css
/ .js
文件中,这些文件可以轻松区分(例如:{someAction}
)而不是实际的网址,然后将.css
或.js
个文件链接指向action
上的controller
。然后,该操作将获取相应的文件,用适当的URL替换其中的所有字符串,然后将其输出回用户。然后,您将使用以下内容来提供文件
return Content(fileText, "text/css"); // or "text/javascript"
另一种方法是将任何css / js放在一个单独的视图中(没有母版页),这使您可以使用Html和Url Helpers。然后,您可以通过使用正确的代码返回适当的视图来提供这些文件。注意:请确保设置正确的ContentType,请参阅ASP.NET MVC and text/xml content type