0

私のMVC3 Razorアプリケーションでは、レイアウトページのajaxを次のように参照しています

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

これをローカル マシンで実行すると、完全に動作します。ただし、iis7 を使用して公開した後、ajax 呼び出しが機能しません。ブラウザでView Sourceを確認したところ、<script src="/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script>公開前と公開<script src="mvcapplication/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script> 後のように参照されていました。私は混乱していますなぜURLが変更されるのですか?

4

2 に答える 2

1

Url.Content(string contentPaht)メソッドを使用VirtualPathUtility.ToAbsolute(string contentPath)して絶対 URL を作成します。

public string Content(string contentPath)
{
    if (string.IsNullOrEmpty(contentPath))
    {
        throw new ArgumentException(MvcResources.Common_NullOrEmpty, "contentPath");
    }
    if (contentPath[0] == '~')
    {
        return VirtualPathUtility.ToAbsolute(contentPath, 
               this.RequestContext.HttpContext.Request.ApplicationPath);
    }

    return contentPath;
}

ご覧のRequest.ApplicationPathとおり、仮想ディレクトリを表す が使用されています。引数contentPathが a で始まらない場合~、メソッドを使用せずに contentPath を返しますToAbsolute(string contentPath)

したがって、次を使用して試すことができます:

@Url.Content("/Scripts/jquery.unobtrusive-ajax.js")

編集:デフォルトルートを変更することもできます:

routes.MapRoute(
    "Default",
    "NameVirtualDirectory/{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
于 2012-04-12T07:25:10.113 に答える