3

サイトの URL を返す小さなヘルパー関数を書きたいと思います。PHP と Codeigniter から来た私は、思い通りに動作させられないことに非常に腹を立てています。

これが私が試していることです:

@{
    var urlHelper = new UrlHelper(Html.ViewContext.RequestContext);
    var baseurl = urlHelper.Content("~");
}

<script>
    function base_url(url) {

        url = url || "";
        return '@baseurl' + url;
    }
</script>

アプリケーションのベース URL を返したいので、パスを気にせずに ajax 呼び出しを行うことができます。これが私がそれを使用する方法です:

// Development
base_url(); // http://localhost:50024

// Production
base_url("Custom/Path"); // http://site.com/Custom/Path

どうすればそのようなことができますか?

編集

ajax 呼び出しを行う js オブジェクトを抽象化したので、絶対パスが必要です。だから私が持っているとしましょう:

function MyController() {
   // ... js code
   return $resource('../MyController/:id');
}

// then
var my_ctrl = MyController();
my_ctrl.id = 1;
my_ctrl.get(); // GET: ../MyController/1

これは my route の場合に機能しますが、 is のhttp://localhost:8080/MyController/Edit場合は失敗しますhttp://localhost:8080/MyController

4

3 に答える 3

2

私はこのようにそれを行うことができました:

@{
    var url = Request.Url;
    var baseurl = url.GetLeftPart(UriPartial.Authority);
}

皆さん、ありがとうございました!

于 2012-10-09T13:06:06.337 に答える
1

あなたは知っています@Url.Action("actionname")@Url.RouteUrl("routename")

これらは両方とも、あなたが説明していることを実行するはずです。

于 2012-10-08T21:46:27.587 に答える
0

URLを手動で作成する代わりに、URLを作成するために使用でき@Url.Action()ます。

<p>@Url.Action("Index", "Home")</p>
/Home/Index

<p>@Url.Action("Edit", "Person", new { id = 1 })</p>
/Person/Edit/1

<p>@Url.Action("Search", "Book", new { title = "Gone With The Wind" })</p>
/Book/Search?title="Gone+With+The+Wind"

このオプションを使用する絶対的な最善の理由は@Url.Action、Global.asaxファイルで定義したバニティURLルートを自動的に適用することです。サハラ以南の砂漠として乾かしてください!:)


あなたの場合、2つの方法で「カスタムパス」を作成できます。

オプションA)

<p>@Url.Action("Path", "Custom")</p>
/Custom/Path

オプションB)

Global.asaxファイルを使用してルートを作成できます。したがって、コントローラー/アクションの組み合わせは任意のものにすることができ、コントローラー/アクションの組み合わせに関係なく、カスタムのバニティルートURLを作成できます。

于 2012-10-08T21:52:32.203 に答える