代码之家  ›  专栏  ›  技术社区  ›  Anastasios Selmani

ajaxBeginForm有4个参数未找到操作方法

  •  6
  • Anastasios Selmani  · 技术社区  · 8 年前

    我有个奇怪的案子,我想让你开悟。 我使用位于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
    }
    

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

    http://{ProjectName}/Person/SaveCandidateLanguage?长度=9

    而不是

    当然,我得到了404 Not found的回复。我也想知道变量是什么?长度=9,我在url的末尾看到,它来自哪里。

    1 回复  |  直到 8 年前
        1
  •  9
  •   GGO    8 年前

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