gpt4 book ai didi

c# - 带有 4 个参数的 Ajax.BeginForm 找不到操作方法

转载 作者:太空狗 更新时间:2023-10-30 00:48:26 25 4
gpt4 key购买 nike

我有一个奇怪的案例,我希望得到您的启发。我有两个 Controller 。一个 Person Controller 用于一般 Person 使用操作方法,一个 Candidate Controller 用于与 Candidate 相关的更具体的操作方法。我使用位于 Person 文件夹下的一个局部 View ,以便用作通用 View ,以防将来我想将它用于其他类型的 Person。目前,此局部 View 使用 Ajax.BeginForm 来定位候选 Controller 。我使用的语法是

@using (Ajax.BeginForm("SaveCandidateLanguage", "Candidate",
new AjaxOptions
{
HttpMethod = "Post",
OnBegin = "onBeginFormValidation",
OnSuccess = "onSaveCandidateLanguageSuccess"
}))
{
// form input elements
}

这种类型的 Ajax.BeginForm 可以正常工作,尽管它针对的是不同 Controller 中的操作。现在对于我的表单验证,我必须向我的 Ajax.BeginForm 添加更多参数。我的新语法是这样的:

@using (Ajax.BeginForm("SaveCandidateLanguage", "Candidate",
new AjaxOptions
{
HttpMethod = "Post",
OnBegin = "onBeginFormValidation",
OnSuccess = "onSaveCandidateLanguageSuccess"
},
new
{
id = "addEditCandidateLanguageForm",
novalidate = "novalidate"
}))
{
// form input elements
}

由于某种原因,这种方式无法找到 Action 方法。如果我将我的 Action 放在 Person Controller 中,它会再次正常工作。但是我想知道为什么会这样。我做了一些挖掘,但我没有设法得到答案。

从 Firebug 我看到浏览器试图发布的 url 是出于某种原因

http://{项目名称}/Person/SaveCandidateLanguage?Length=9

代替

http://{ProjectName}/Candidate/SaveCandidateLanguage?Length=9

自然我会收到 404 Not found 响应。我还想知道我在 url 末尾看到的变量 ?Length=9 是什么,它来自哪里。

最佳答案

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 是字符串的唯一属性

关于c# - 带有 4 个参数的 Ajax.BeginForm 找不到操作方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46588229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com