Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Net MVC Razor-Javascript函数路由问题_Javascript_Asp.net Mvc_Razor_Html.dropdownlistfor_Asp.net Mvc Partialview - Fatal编程技术网

Net MVC Razor-Javascript函数路由问题

Net MVC Razor-Javascript函数路由问题,javascript,asp.net-mvc,razor,html.dropdownlistfor,asp.net-mvc-partialview,Javascript,Asp.net Mvc,Razor,Html.dropdownlistfor,Asp.net Mvc Partialview,我在使用cascade dropdownlist(ASP.Net MVC Razor)时遇到了一些问题,我知道在这个主题上有很多问题需要回答,但我的问题却大不相同,我在几个小时的搜索后找不到答案 我有我的PessoaController(PersonController),它位于一个名为requerente的区域内 我有两个下拉列表,一个是省(Província),另一个是郊区(Município) 下面是我在视图中的代码: <div class="editor-label">

我在使用cascade dropdownlist(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>
代码仍然在create视图上完美运行,但在edit视图上,每当我选择一个不同的省时,就会出现404错误,因为找不到该函数

从firebug中我可以看出问题所在,我的创建视图使用正确的路径来调用控制器中的函数。 本地主机:57934/requerente/pessoa/LOADMONICIPIOSBYPROVINCEID?provinciaId=200003

然而,在我的编辑视图中,我的控制器的名称被两次添加到路径中,从而导致404。 本地主机:57934/requerente/pessoa/pessoa/LOADMONICIPIOSBYPROVINCEID?provinciaId=200003


我知道复制代码和调整url会让我启动并运行,但是有人知道为什么会出现这种不一致的行为吗?考虑到这两个视图(创建和编辑)位于同一文件夹上,正在执行相同的共享功能。

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

  • 本地主机:57394/requerente/foo
  • 本地主机:57394/requerente/pessao/bar
相反,您可以使用
Url.Action
动态生成目标Url。我不知道您的路由方案,但例如:

$.getJSON("@Url.Action("LoadMunicipiosByProvinceId", "pessoa")", 
    { provinciaId: selectedProvinceId },
    function(data) {/*...*/});

被访问页面的URL是什么
localhost:57394/requerente/foo
localhost:57394/requerente/pessao/foo
也许?您好,谢谢您的回复,您的答案不是100%正确,但我将其标记为正确答案,因为(1)它引导我找到了解决方案。(2) 很可能是受我问题中参数顺序的影响。我尝试按照您的建议使用@url.action,但仍然存在相同的问题,但从智能中我可以看出参数的顺序应该是(actionName,controllerName),因此我将$.getJSON(@url.action(“pessoa”,“loadmuniciosbyProvinceId”)…更改为$.getJSON(@url.action(“loadmuniciosbyProvinceId”,“pessoa”))…现在它工作得很好。:)
     @section Scripts {
             @Scripts.Render("~/bundles/jqueryval")

             @Html.Partial("LoadMunicipiosScript");
    }
$.getJSON("@Url.Action("LoadMunicipiosByProvinceId", "pessoa")", 
    { provinciaId: selectedProvinceId },
    function(data) {/*...*/});