我有一个名为“abc”的Asp.net MVC 3项目。调试在VS中运行时显示http://localhost:23543/abc/....
。在IIS 7的默认网站下的虚拟文件夹中发布项目后,网址将为http://hostname/webAppName/abc/...
。
但是,在分离的外部 js文件中,使用'/scripts/...'
进行了一些jQuery ajax调用。 '/scripts/'
的绝对路径将变为...wwwroot/abc/scripts/...
而不是...wwwroot/webAppName/abc/scripts/...
。我正在创建一个用于包装ajax url链接的js函数。
var fullPath = '@HttpContext.Current.Request.Url.Scheme://@HttpContext.Current.Request.Url.Authority';
function GetPath(projectName, url) {
return fullPath + projectName + url;
}
在js文件中:... url: GetPath('/scripts/...')....
如何获取项目名称?或者有更好的解决方案吗?
答案 0 :(得分:2)
在您的标记中,您可以使用将在运行时转换为正确格式的站点相对URL:
<script type="text/javascript" src="@Url.Content("~/Scripts/myscript.js")"></script>
答案 1 :(得分:2)
通常在脚本中,我倾向于做的是AJAXify现有的锚链接或已经使用HTML助手生成的正确URL的表单。
例如,使用表单(使用Html.BeginForm
帮助程序生成):
$('#myform').submit(function() {
$.ajax(}
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function(result) {
}
});
return false;
});
或使用锚点(使用Html.ActionLink
帮助程序生成):
$('#mylink').click(function() {
$.ajax(}
url: this.href,
type: 'POST',
success: function(result) {
}
});
return false;
});
当然,在某些情况下,您需要一个除链接或表单之外的网址。在这些情况下我倾向于做的是在某些DOM元素上使用HTML5 data-*
属性。例如:
<div id="foo" data-url="@Url.Action("SomeAction", "SomeController")">foo bar</div>
当我需要这个网址时,我会简单地说:
var url = $('#foo').data('url');
了解我们如何不需要任何GetPath
功能。所有网址都已经是我们DOM的一部分,在单独的javascript文件中我们只是使用它们。
答案 2 :(得分:2)
使用以下代码创建mvc请求网址
var siteRoot = '@Url.Content("~/")';
function GetPath(url) {
return siteRoot + url;
}