0

JS をページに直接配置するのではなく、別のファイルに移動しようとしています。しかし、何らかの理由で、私はそれを機能させることができません。

ドロップダウンの選択に応じてサイトを更新したい。私が今やっている方法は次のとおりです。

意見:

<script type="text/javascript">
$(document).ready(function () {
    $("#EntityType").change(function () {
        /* Get the selected value of dropdownlist */
        var selectedID = $(this).val();

        /* Request the partial view with .get request. */
        $.get('/Entity/Create_DropDownList/' + selectedID, function (data) {

            /* data is the pure html returned from action method, load it to your page */
            $('#entity_form_attributes').html(data);
            /* little fade in effect */
            $('#entity_form_attributes').fadeIn('fast');
        });
    });
});
</script>

    <div class="editor-field">
        @Html.DropDownList("EntityType", (SelectList)ViewData["Types"])
    </div>

    <div id="entity_form_attributes"></div>

これは機能しています。部分ビューは、必要に応じて div タグに読み込まれます。ただし、JavaScript ファイルを作成してスクリプトをファイルに移動すると、失敗します。共有スタート サイトから JavaScript ファイルをインクルードしています。

誰が私が間違っているかを見ることができますか?アプリケーションは MVC3 アプリケーションです。これを機能させるために設定する必要がある設定/プロパティはありますか?

4

1 に答える 1

1

誰が私が間違っているかを見ることができますか?

はい、URL ヘルパーを使用して生成する代わりに、ここで URL をハードコードしました。あなたは決してそれをすべきではありません:

$.get('/Entity/Create_DropDownList/'

URL が間違っているため、IIS にアプリケーションをデプロイすると、これが壊れます。このハードコードされた URL のため、最初に仮想ディレクトリ名を含めることを省略しました。

したがって、ASP.NET MVC アプリケーションで URL を処理するときは、常に Url ヘルパーを使用してください。したがって、あなたの場合、ビューでこの URL を HTML5data-*属性として生成できます。

@Html.DropDownList(
    "EntityType", 
    (SelectList)ViewData["Types"], 
    new { data_url = Url.Action("Create_DropDownList", "Entity") }
)

次に、別の JavaScript ファイルで、この URL を取得して使用します。

$("#EntityType").change(function () {
    /* Get the selected value of dropdownlist */
    var selectedID = $(this).val();

    /* Get the url from the data-url HTML attribute */ 
    var url = $(this).data('url');

    /* Request the partial view with .get request. */
    $.get(url, { id: selectedID }, function (data) {
        /* data is the pure html returned from action method, load it to your page */
        $('#entity_form_attributes').html(data);
        /* little fade in effect */
        $('#entity_form_attributes').fadeIn('fast');
    });
});
于 2012-08-14T09:03:36.827 に答える