0

カスケード ドロップダウンリスト (ASP.Net MVC Razor) でいくつかの問題が発生しています。このトピックについて多くの質問が回答されていることは知っていますが、私の質問はまったく異なり、何時間も検索しても回答が見つかりませんでした。

requerente という名前の領域内にある PessoaController (PersonController) があります。

地方 (Província) 用と郊外 (Município) 用の 2 つのドロップダウンリストがあります。

以下は、私の見解にあるコードです。

    <div class="editor-label">
        @Html.LabelFor(model => model.ProvinciaId, "Província")
    </div>
    <div class="editor-field">

          @Html.DropDownListFor(Model => Model.ProvinciaId, new SelectList(ViewBag.ProvinciaId as System.Collections.IEnumerable, "id", "Valor"),
          "Seleccione", new { id = "ddlProvincia" })
        @Html.ValidationMessageFor(model => model.ProvinciaId)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.MunicipioId, "Município")
    </div>
    <div class="editor-field">

        @Html.DropDownListFor(Model => Model.MunicipioId, new SelectList(ViewBag.MunicipioId as System.Collections.IEnumerable, "Id", "Valor"),
        "Seleccione", new { id = "ddlMunicipio" })
        @Html.ValidationMessageFor(model => model.MunicipioId)
    </div>

これは、コントローラーで関数を呼び出す JavaScript コードです。

    <script type="text/javascript">

        $(document).ready(function () {
            $("#ddlProvincia").change(function () {
                var selectedProvinceId = $(this).val();
                $.getJSON("../pessoa/LoadMunicipiosByProvinceId", { provinciaId: selectedProvinceId },
                       function (municipioData) {
                           var select = $("#ddlMunicipio");
                           select.empty();
                           select.append($('<option/>', {
                               value: 0,
                               text: "Escolha o Municipio"
                           }));
                           $.each(municipioData, function (index, itemData) {
                               select.append($('<option/>', {
                                   value: itemData.Value,
                                   text: itemData.Text
                               }));
                           });
                       });
            });
        });
    </script>.

このコードは(作成ビューで)完全に機能します。新しい人を追加したいときに州を選択すると、選択した州に従って郊外がロードされます。

コードを編集ビューにコピーして JavaScript 関数を複製する必要がないように、JavaScript 関数を部分ビューに移動し、作成ビューと編集ビューの両方に含めることにしました。

     @section Scripts {
             @Scripts.Render("~/bundles/jqueryval")

             @Html.Partial("LoadMunicipiosScript");
    }

コードは引き続き作成ビューで完全に実行されますが、編集ビューでは、関数が見つからないため、別の州を選択するたびに 404 エラーが発生します。

firebug から、問題が何であるかがわかります。作成ビューは正しいパスを使用してコントローラーの関数を呼び出します。ローカルホスト:57934/requerente/pessoa/LoadMunicipiosByProvinceId?provinciaId=200003

私の編集ビューでは、どういうわけかコントローラーの名前がパスに 2 回追加され、404 になります。

コードを複製してURLを微調整すると起動して実行できることはわかっていますが、両方のビュー(作成と編集)が同じフォルダーにあり、同じ共有機能を実行していることを考慮して、一貫性のない動作の理由を知っている人はいますか.

4

1 に答える 1

0

../pessoa/LoadMunicipiosByProvinceIdこの問題は、2 つの異なるページから同じ相対 URL をロードしているように見えますが、それぞれの異なる場所を参照することになります。これは、たとえば、2 つの URL が次の場合に発生します (ベース フォルダーが異なることに注意してください)。

  • ローカルホスト:57394/requerente/foo
  • ローカルホスト:57394/requerente/pessao/バー

代わりに、 を使用Url.Actionしてターゲット URL を動的に生成できます。あなたのルーティングスキームはわかりませんが、たとえば:

$.getJSON("@Url.Action("LoadMunicipiosByProvinceId", "pessoa")", 
    { provinciaId: selectedProvinceId },
    function(data) {/*...*/});
于 2013-09-09T01:42:02.767 に答える