为什么错误的Ajax表单同时返回消息和表单?

时间:2017-04-17 12:33:49

标签: jquery asp.net-mvc

第一次尝试在Ajax上创建一些东西。有一个表格,您需要在其中输入名称。如果输入的值超过3(如示例中的限制),则会收到错误消息+相同的表单。总错误消息和两个相同的表单。完全绝望来了。请告诉我如何解决它?先感谢您!我为翻译道歉。

控制器

[HttpPost]
       public ActionResult Name(Name name)
        {
            if (ModelState.IsValid)
            {
                repository.SaveName(name);

                if (Request.IsAjaxRequest())
                {
                    return PartialView("NameSent");
                }
                return View("NameSent");
            }
                return View();
            }

查看姓名

@{
    AjaxOptions ajaxName = new AjaxOptions
    {
        UpdateTargetId = "target",
        HttpMethod = "post"        
    };
}
<div>
    @Html.ValidationSummary()
    <p id="target"></p>
</div>

<div class="">
    @using (Ajax.BeginForm("Name", ajaxName))
    {
        @Html.TextBoxFor(m => m.Name)
        <div class="">
            <input type="submit" value="Save" class="btn btn-primary" />
        </div>
    }
</div>

模型

public class Name
    {
        public int NameId { get; set; }
        [Required(ErrorMessage = "Your name")]
        [StringLength(3)] /*For example*/
        public string Name { get; set; }
    }

这就是我所看到的。

enter image description here

1 个答案:

答案 0 :(得分:0)

更新:我扩展了下面的代码示例以更清楚地显示我的意思

因为出错,您将返回表单的标准视图:

return View();

当模型有效时,您需要像上面那样进行分支:

[HttpPost]
public ActionResult Name(Name name)
{
    if (ModelState.IsValid)
    {
        repository.SaveName(name);

        if (Request.IsAjaxRequest())
        {
            return PartialView("NameSent");
        }
        return View("NameSent");
    }

    if (Request.IsAjaxRequest())
    {
        return PartialView("NameError");
    }
    return View();
}

此外,FWIW,当模型有效且请求不是AJAX时,您应该重定向,而不是返回视图。这是众所周知的PRG(Post-Redirect-Get)模式的一部分。通过重定向,可以防止用户通过刷新意外重新提交。