作者:机加工N_918 | 来源:互联网 | 2023-01-15 12:45
我有一个奇怪的案例,我想要你的启蒙.我有两个控制器.一般人员控制器使用行动方法和一个候选人控制器,用于与候选人相关的更具体的行动方法.我使用位于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中,它会再次正常工作.但是我想知道为什么会这样.我做了一些挖掘,但我没有设法得到答案.
从firebug我看到浏览器试图发布的URL是出于某种原因
HTTP:// {项目名} /人/ SaveCandidateLanguage长度= 9
代替
HTTP:// {项目名} /候选/ SaveCandidateLanguage长度= 9
我自然得到404未找到的回复.我还想知道变量是什么?我在网址末尾看到的长度= 9,它来自何处.
1> GGO..:
Ajax.BeginForm
有11个不同的声明.在你的第一种情况下,它是有效的,因为你使用这个:
Ajax.BeginForm(string actionName, string controllerName, AjaxOptions options)
但是你使用这个的第二种情况,试图在object routeValues
参数中放入一个字符串:
Ajax.BeginForm(string actionName, object routeValues, AjaxOptions options, object htmlAttributes)
最后,您要使用的声明是:
Ajax.BeginForm(string actionName, string controllerName, object routeValues, AjaxOptions ajaxOptions, object htmlAttributes)
使用null
值实现,例如:
Ajax.BeginForm("SaveCandidateLanguage", "Candidate", null,
new AjaxOptions
{
HttpMethod = "Post",
OnBegin= "onBeginFormValidation",
OnSuccess= "onSaveCandidateLanguageSuccess"
},
new
{
id = "addEditCandidateLanguageForm",
novalidate = "novalidate"
}))
原因?length="9"
是"Candidate"包含9个字符,length是字符串的唯一属性
而'?length ="9"`的原因是因为"Candidate"包含9个字符而``length`是`string`的唯一属性