如何获得Asp.Net MVC 3当前项目名称?

时间:2011-07-22 22:45:58

标签: javascript asp.net-mvc jquery razor

我有一个名为“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/...')....

如何获取项目名称?或者有更好的解决方案吗?

3 个答案:

答案 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;
}