3

いくつかのパーシャル ビューにいくつかの JS コードがあります。

これらすべてのコードを別の JS ファイルに入れて、JS コードと HTML コードを分離することをお勧めします。

しかし、JS 内で MVC コードをどのように扱うのでしょうか?

以下の例は、部分ビューにある JS コードです。JSファイルに入れたいのですが、JSコードにMVCコード@Url.Action("ResultForm", "File")が含まれており、JSファイルでは実行されません。

なにか提案を?

Javascript コード

<script type="text/javascript">
    var varTimerSpeed = 5000;
    var varTimerInterval;
    var onlyOneInstance = false;

    startTimer();

    function startTimer() {
        onlyOneInstance = false;
        varTimerInterval = setInterval(loadResultForm, varTimerSpeed);
    }

    function loadResultForm() {
        if (onlyOneInstance) return;
        clearInterval(varTimerInterval);
        onlyOneInstance = true;
        $.ajax({
            url: '@Url.Action("ResultForm", "File")',
            data: '',
            dataType: 'html',
            success: function (data) {
                $('#ResultForm').html(data);
                startTimer();
            }
        });
    };
</script>
4

5 に答える 5

3

I am assuming using a Razor partial for only the js code is not an option. In that case you could use this approach:

in your view.cshtml

<script type="text/javascript">
    var Namespace.urlForModule = '@Url.Action("ResultForm", "File")';
</script>
<script type="text/javascript" src="customScript.js"></script>

in you customScript.js

$.ajax({
    url: Namespace.urlForModule,
})

The idea is to separate out the Asp.Net MVC specific code from the js code.

The way you want to do that is upto you. As some one else suggested, you could attach data-* attributes to some div and read those. I prefer this, as it expresses my intent clearly.

于 2012-08-07T12:04:47.453 に答える
1

解決策は、目的の動的値を使用してmetaタグまたは属性を作成し、JavaScriptでそれをキャッチすることです。data-*このようにして、小さな変更を加えてコードを完全に分離できます。

于 2012-08-07T11:58:51.920 に答える
0

ファイル「somescript.js」を作成し、コードを一意のパブリック関数内に配置し、ハードコードされた外部依存関係を抽出して、パラメーターに置き換えます。

var startXyz = function(resultFormUrl) {
    var varTimerSpeed = 5000;
    var varTimerInterval;
    var onlyOneInstance = false;

    startTimer();

    function startTimer() {
        onlyOneInstance = false;
        varTimerInterval = setInterval(loadResultForm, varTimerSpeed);
    }

    function loadResultForm() {
        if (onlyOneInstance) return;
        clearInterval(varTimerInterval);
        onlyOneInstance = true;
        $.ajax({
            url: resultFromUrl,
            data: '',
            dataType: 'html',
            success: function (data) {
                $('#ResultForm').html(data);
                startTimer();
            }
        });
    };
};

次に、ページで次のことを行います。

<script>
   $(function(){ 
       startXyz('@Url.Action("ResultForm", "File")');
   });
</script>

これで、ページ/部分を起動するモジュラー関数と、サーバーの状態に直接依存せず、同じページまたは別のページで再利用できるスクリプトファイルができました。

このアプローチは、部分的なビューがページごとに複数回レンダリングされる場合に特に役立ちます。

于 2012-08-07T11:58:31.277 に答える
0

スクリプトタグを追加する代わりに
、js コードだけを含む部分ビューを作成して実行しないのはなぜですか?renderpartial

于 2012-08-07T12:24:48.073 に答える
0

URLで隠しフィールドを追加できます:

// View:   
@Html.Hidden("LoadResultFormUrl", @Url.Action("ResultForm", "File"))

// js-file
function loadResultForm() {
    url = $("#LoadResultFormUrl").val();
    ...
};
于 2012-08-07T12:22:24.627 に答える