第一次尝试在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; }
}
这就是我所看到的。
答案 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)模式的一部分。通过重定向,可以防止用户通过刷新意外重新提交。