Net MVC Razor-Javascript函数路由问题
我在使用cascade dropdownlist(ASP.Net MVC Razor)时遇到了一些问题,我知道在这个主题上有很多问题需要回答,但我的问题却大不相同,我在几个小时的搜索后找不到答案 我有我的PessoaController(PersonController),它位于一个名为requerente的区域内 我有两个下拉列表,一个是省(Província),另一个是郊区(Município) 下面是我在视图中的代码: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">
<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) {/*...*/});