想象一下在结账时有几个步骤(视图)的网上商店。当客户按下“下一步”时,按钮,相应的'动作'方法被调用。在该方法中,进行了一些验证,检查客户是否可以继续进行,或者订单是否有问题。根据验证结果,我想要发生以下两件事之一:
A)生成并显示下一个视图。
B)客户留在当前页面,但会弹出一个模态对话框,其中包含错误消息。
我已经尝试了几种在网络上发现的方法,但到目前为止还没有任何工作。我尝试过的最后一件事是使用AJAX,但我真的不知道这是否是正确的方法。
public ActionResult SomeAction()
{
if (ModelState.IsValid)
{
return View();
}
// If not valid
return errorMessage
}
$(document).ready(function () {
$("#btn").click(function () {
$.ajax({
url: "/Home/SomeAction",
async: true,
success: function (result) {
if (!result.success) {
alert(result.error);
}
// Else display view
}
});
答案 0 :(得分:0)
是否要在模式弹出窗口中显示局部视图?如果是这样,您可以使用已经完成的JQuery AJAX方法,但将其与JQuery弹出/灯箱插件结合使用,以显示生成的HTML。
所以,在你的代码中" / Home / SomeAction"是弹出窗口的PartialView返回" PartialView"来自你的Controller,当你在JQuery中收到HTML时,成功:"事件,也许使用(例如)" Jquery Colorbox"显示它(见这里:http://www.jacklmoore.com/colorbox/)
答案 1 :(得分:0)
很难说你想如何实现这样的工作流程,但我想到的一件事就是用ie返回值。 TempData存储中的错误并正确地重定向到下一步,或者验证失败到同一步骤。
对于这样的简单模型:
public class Cart
{
[Required]
public string Item { get; set; }
[Required]
public string Quantity { get; set; }
}
控制器的一些代码示例如下所示:
public class CartController : Controller
{
//
// GET: /Cart/
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(Cart model)
{
if (ModelState.IsValid)
return RedirectToAction("Step1");
TempData["Error"] = "Validation failed";
return View();
}
public ActionResult Step1()
{
// add more logic, steps etc
return View();
}
}
在观点方面:
@using (Html.BeginForm())
{
<fieldset>
<p>
<label for="Id">Item:</label>
@Html.TextBox("Item")
@Html.ValidationMessage("Item", "*")
@Html.Editor("Quantity")
</p>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
@if (TempData["Error"] != null)
{
<p>Please fix all errors!</p>
}
我可能会将其嵌入到查看母版页中,即。只针对那些步骤。
编辑:更改了一些代码添加了更多真实世界的例子:-) 顺便说一句。请记住,使用这种机制,您将免费获得MVC框架的验证,以便在需要时突出显示您的字段。如果需要,您也可以稍后将此模型传递给其他步骤。总的来说,这是一个很好的验证入门指南:http://www.asp.net/mvc/overview/older-versions/getting-started-with-aspnet-mvc4/adding-validation-to-the-model
如果您想采用AJAX方式,那么您可以使用以下内容:
$.post("@Url.Action("Index")", values, function(data) {
// add logic for loading next page or error
});
值对象你必须用适当的结构构建自己。
祝你好运!答案 2 :(得分:-1)
不需要ajax来检查表单,为什么不只是几行javascript?比如“点击,如果'电子邮件'输入字段为空,则发出警告”等。有许多表单验证插件,如jQuery inline form validation,只是google it。