0

T4MVC は外部 JavaScript ファイルに拡張できません。JQuery .load() メソッドのコントローラー/アクション値のような「マジック ストリング」を管理するための最良の方法を見つけたいと思います。

アクションを変更してアプリケーションでエラーを引き起こすリスクを最小限に抑えたいと考えています。クライアント側のエラーを見つけるためにVisual Studioでビューをコンパイルできることは知っていますが、JS外部ファイルではできません。

T4MVCを使用してビューのコンパイルエラーを検出できるように、JavaScriptファイルタイプとしてビューを含めるようないくつかのソリューションを見つけましたが、このアプローチはサーバーに不要なリクエストを作成し、JSの場合はクライアント側にキャッシュされます。

一定の JS ファイル、または制限内で、T4MVC params メソッドを使用した一定の View ファイルについて考えています。

より良いアイデアはありますか?

ここにサンプルを残します:

<script type="text/javascript">
$(function () {
    $('#Category_Id')
        .cascade(
        {
            url: '@Url.Action(MVC.Ad.ListCategoryTypeByCategory())',
            paramName: '@MVC.Ad.ListCategoryTypeByCategoryParams.categoryId',
            firstOption: '@HeelpResources.DropdownlistCategoryTypeFirstRecord',
            childSelect: $('#CategoryType_Id')
        })
        .cascade(
        {
            url: '@Url.Action(MVC.Ad.ListMakeByCategory())',
            paramName: '@MVC.Ad.ListMakeByCategoryParams.categoryId',
            firstOption: '@HeelpResources.DropdownlistMakeFirstRecord',
            childSelect: $('#Make_Id')
        });

    $('#Make_Id').cascade({
        url: '@Url.Action(MVC.Ad.ListModelByMake())',
        paramName: '@MVC.Ad.ListModelByMakeParams.makeId',
        firstOption: '@HeelpResources.DropdownlistModelFirstRecord',
        childSelect: $('#Model_Id')
    });
});
</script>

このコードを JS 外部ファイルに入れたい場合、「Magic Strings」を回避するにはどうすればよいですか?

ありがとう。

4

3 に答える 3

0

すでに試してみたと思いますが、T4MVCを使用したい場合は、サーバー側の.cshtmlファイルからJSを返すのがおそらく最善の策だと思います。これを行っても、クライアント側でキャッシュされないことを意味するわけではないことに注意してください(ヘッダーが正しく取得されている場合)。実際、クライアントの観点からは、純粋なJSファイルを返すことと.cshtmlからのものを返すことは実際には区別できません。いずれにせよ、JSを取り戻します。

于 2012-12-31T19:23:53.180 に答える
0

あなたが使っている方法はいいと思います、それは私が使っているものです。ルートベースの Url 生成を使用しているため、実際には魔法の文字列ではなく、javascript の Url が古くなることを心配する必要はありません。

別のアプローチとして、JsonResult を返すコントローラー アクションを使用することもできます。

    public JsonResult GetConcentrationsMap() {
        var magicStrings = _magicStringsService.GetAll().Select(c => new { Name= c.Name, Url = c.Url });

        return Json(new { urls = magicStrings }, JsonRequestBehavior.AllowGet);
    }

これはクライアントにキャッシュされますが、David Ebbo が言ったように、.cshtml でも実現できます。魔法の文字列を持つ .js または json リソースへのパスを JavaScript コードに伝える必要があるため、もっと面倒だと思います。

于 2012-12-31T22:02:40.500 に答える
0

JavaScriptModel ( http://jsm.codeplex.com ) を使用できます。これらの「魔法の文字列」がグローバルに必要な場合は、フィルターを作成してそこに追加することを検討してください。

JavaScriptModel を使用してフィルターを作成する方法の例を次に示します。

http://jsm.codeplex.com/wikipage?title=Use%20JavaScriptModel%20in%20a%20global%20filter&referringTitle=ドキュメント

于 2013-01-10T08:57:31.057 に答える