【发布时间】:2014-07-21 20:41:05
【问题描述】:
我正在构建 asp.net mvc5 应用程序,但没有足够的知识来解决它。我有一个需要验证的表单,然后使用 ajax 发布。我用Ajax.BeginForm()
@using (Ajax.BeginForm("ActionMethod", "Controller", new { id =
"form"}, new AjaxOptions { HttpMethod = "POST", OnBegin =
"FormValidation", OnSuccess = "WriteMessage" }))
在函数 FormValidation 内部,我有自己的验证代码,其中,除其他外,我进行了 ajax 调用以从数据库中获取数据。如果函数返回 false 则不提交表单,但如果返回 true 则提交表单。我成功地获取了 json 格式的数据。我获取的数据在 ajax 的成功回调中,不能在它之外使用,所以在成功回调中我有验证代码。但是当我在成功回调中的验证代码失败时,我希望不提交该表单,但该错误会显示给用户。如何停止提交表单,或者可能有另一种方法。
我的控制器操作:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include="ID,Date,Name,Surname,Adress,ProjectName")] Data data)
{
if (ModelState.IsValid)
{
db.Data.Add(data);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(data);
}
【问题讨论】:
-
显示完整的表单和控制器操作
-
如果您使用的是 Ajax 调用,那么您在与服务器通信时不会执行客户端验证。您应该做的是用一些属性装饰您的模型属性,以告诉文本框(或其他输入)有效范围等各个属性。然后,您还可以在将表单数据发送到服务器之前,对提交按钮上的 click 方法中的不同值执行其他次要业务逻辑。您为 Ajax 提供的方法只不过是 Save 方法。没有验证。
-
是的,但是对于一些“复杂”的场景呢?我知道我可以创建自己的自定义注释,但我不知道我是否能够为我的场景做到这一点。
标签: jquery ajax asp.net-mvc-5 ajax.beginform