带有4个参数的Ajax.BeginForm没有找到action方法

时间:2017-10-05 14:31:25

标签: c# asp.net-mvc razor html-helper ajax.beginform

我有一个奇怪的案例,我想要你的启蒙。 我有两个控制器。一般人员控制器使用行动方法和一个候选人控制器,用于与候选人相关的更具体的行动方法。 我使用位于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我看到浏览器尝试发布的网址是出于某种原因

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

而不是

的http:// {项目名} /候选/ SaveCandidateLanguage长度= 9

然后我自然得到404 Not found响应。我还想知道变量是什么?我在网址的末尾看到的长度= 9,它来自何处。

1 个答案:

答案 0 :(得分:6)

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