0

我在使用级联下拉列表(ASP.Net MVC Razor)时遇到了一些问题,我知道关于这个主题有很多问题得到了解答,但我的问题完全不同,经过数小时的搜索后我找不到答案。

我有我的 PessoaController (PersonController),它位于一个名为 requerente 的区域内。

我有两个下拉列表,一个用于省(Província),另一个用于郊区(Município)。

下面是我认为的代码:

    <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 错误,因为找不到该功能。

从萤火虫我可以看到问题是什么,我的创建视图使用正确的路径来调用控制器中的函数。本地主机:57934/requerente/pessoa/LoadMunicipiosByProvinceId?provinciaId=200003

如何在我的编辑视图中以某种方式将我的控制器的名称添加到路径中两次,从而导致 404。 localhost:57934/requerente/pessoa/pessoa/LoadMunicipiosByProvinceId?provinciaId=200003

我知道复制代码和调整 url 可以让我启动并运行,但是有没有人知道为什么不一致的行为,考虑到两个视图(创建和编辑)都在同一个文件夹上并且正在执行相同的共享功能.

4

1 回答 1

0

问题看起来像您../pessoa/LoadMunicipiosByProvinceId从两个不同的页面加载相同的相对 URL,最终指向每个不同的位置。例如,如果您的两个 URL 是(注意不同的基本文件夹),则会发生这种情况:

  • 本地主机:57394/requerente/foo
  • 本地主机:57394/requerente/pessao/bar

相反,您可以使用Url.Action动态生成目标 URL。我不知道你的路由方案,但例如:

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