【发布时间】:2017-10-05 14:31:24
【问题描述】:
我有一个奇怪的案例,我希望得到您的启发。 我有两个控制器。一个人控制器用于一般人员使用操作方法,一个候选控制器用于与候选人相关的更具体的操作方法。 我使用位于 Person 文件夹下的一个局部视图,以便在将来将其用于其他类型的 Person 时用作通用视图。 目前这个局部视图使用了一个针对候选控制器的 Ajax.BeginForm。我使用的语法是
@using (Ajax.BeginForm("SaveCandidateLanguage", "Candidate",
new AjaxOptions
{
HttpMethod = "Post",
OnBegin = "onBeginFormValidation",
OnSuccess = "onSaveCandidateLanguageSuccess"
}))
{
// form input elements
}
这种类型的 Ajax.BeginForm 可以正常工作,尽管它以不同控制器中的操作为目标。 现在,对于我的表单验证,我必须为我的 Ajax.BeginForm 添加更多参数。我的新语法是这样的:
@using (Ajax.BeginForm("SaveCandidateLanguage", "Candidate",
new AjaxOptions
{
HttpMethod = "Post",
OnBegin = "onBeginFormValidation",
OnSuccess = "onSaveCandidateLanguageSuccess"
},
new
{
id = "addEditCandidateLanguageForm",
novalidate = "novalidate"
}))
{
// form input elements
}
由于某种原因,这种方式找不到 Action 方法。如果我将我的操作放在 Person Controller 中,它会再次正常工作。但是我想知道为什么会这样。我做了一些挖掘,但我没有设法得到答案。
从萤火虫我看到浏览器尝试发布的网址是出于某种原因
http://{ProjectName}/Person/SaveCandidateLanguage?Length=9
而不是
http://{ProjectName}/Candidate/SaveCandidateLanguage?Length=9
我自然会收到 404 Not found 响应。我还想知道我在 url 末尾看到的变量 ?Length=9 是什么,它来自哪里。
【问题讨论】:
标签: c# asp.net-mvc razor html-helper ajax.beginform