2011-07-22 30 views
1

私は "abc"という名前のAsp.net MVC 3プロジェクトを持っています。 VSでデバッグを実行すると、http://localhost:23543/abc/....が表示されます。 urlはhttp://hostname/webAppName/abc/...は後にIIS 7.Asp.Net MVC 3現在のプロジェクト名を取得する方法?

の既定のWebサイトの下に仮想フォルダにプロジェクトを発行されますが、いくつかのjQueryのAJAX呼び出しを分離外部のjsファイルで、'/scripts/...'を使用して、そこにあります。 '/scripts/'の絶対パスは...wwwroot/webAppName/abc/scripts/...の代わりに...wwwroot/abc/scripts/...になります。私はajaxのURLリンクをラップするためのjs関数を作成しています。プロジェクト名を取得する方法... url: GetPath('/scripts/...')....

:JSファイルで

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

?または、より良い解決策がありますか?あなたのマークアップで

答えて

2

は一体ああ、私は慎重に十分に読んでいないのMVCのリクエストURL

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

は、実行時に正しい形式に変換されますサイト相対URLを使用することができます。

私がやりがちどのスクリプトで通常
<script type="text/javascript" src="@Url.Content("~/Scripts/myscript.js")"></script> 
+0

を作成するために、以下のコードを使用してください。私は別のファイルからURLを使用したいと思う。これはそれを助けません。 –

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; 
}); 

もちろん、いくつかの例ところがあるかもしれませんリンクやフォーム以外のURLが必要です。そのような場合、私はHTML5のdata-*属性をいくつかのDOM要素に使用する傾向があります。たとえば、次のように

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

と、私はこのURLを必要なときに私は単純になります。

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

は、私たちがどのGetPath機能を必要としない方法を参照してください。すべてのURLは既にDOMの一部であり、別のjavascriptファイルでは単にそれらを使用します。

関連する問題