开发者

How to get Asp.Net MVC 3 current project name?

I have an Asp.net MVC 3 project with name of "abc". It shows http://localhost:23543/abc/.... when debugging run in VS. The url will be http://hostname/webAppName/abc/... after publish the pro开发者_开发知识库ject in a virtual folder under the default web site of IIS 7.

However, there is some jQuery ajax call, using '/scripts/...', in a separated external js file. The absolute path of '/scripts/' will become ...wwwroot/abc/scripts/... instead of ...wwwroot/webAppName/abc/scripts/.... I am creating a js function for wrapping the ajax url links.

var fullPath = '@HttpContext.Current.Request.Url.Scheme://@HttpContext.Current.Request.Url.Authority';
function GetPath(projectName, url) {
    return fullPath + projectName + url;
}

In js file: ... url: GetPath('/scripts/...')....

How to get the project name? Or is there a better solution?


Use the below code to create the mvc request url

var siteRoot = '@Url.Content("~/")';
function GetPath(url) {
    return siteRoot + url;
}


In your markup, you can use a site-relative URL that will be translated to the correct form at runtime:

<script type="text/javascript" src="@Url.Content("~/Scripts/myscript.js")"></script>


Usually in script what I tend to do is AJAXify existing anchor links or forms which already have the proper url as they were generated using HTML helpers.

So for example with a form (generated using Html.BeginForm helper):

$('#myform').submit(function() {
    $.ajax(}
        url: this.action,
        type: this.method,
        data: $(this).serialize(),
        success: function(result) {

        }
    });
    return false;
});

or with an anchor (generated using Html.ActionLink helper):

$('#mylink').click(function() {
    $.ajax(}
        url: this.href,
        type: 'POST',
        success: function(result) {

        }
    });
    return false;
});

Of course there might be some cases where you need an url other than a link or a form. What I tend to do in those cases is to use HTML5 data-* attributes on some DOM element. For example:

<div id="foo" data-url="@Url.Action("SomeAction", "SomeController")">foo bar</div>

and when I needed this url I would simply:

var url = $('#foo').data('url');

See how we don't need any GetPath function. All the urls are already part of our DOM and in the separate javascript file we simply use them.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜