博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC验证09-使用MVC的Ajax.BeginForm方法实现异步验证
阅读量:5956 次
发布时间:2019-06-19

本文共 2313 字,大约阅读时间需要 7 分钟。

MVC中,关于往后台提交的方法有:

1、Html.BeginForm():同步
2、Ajax.BeginForm():异步
3、js或jQuery提交后台

本文体验Ajax.BeginForm()方法。

  View model

using System;
using System.ComponentModel.DataAnnotations;
 
namespace XHelent.Models
{
public class Registration : IValidatableObject
{
 
public string RegisrationUniqueId { get; set; }
 
[Required]
[Display(Name = "姓名")]
public string Name { get; set; }
 
[Required]
[Display(Name = "年龄")]
public int Age { get; set; }
 
public System.Collections.Generic.IEnumerable
Validate(ValidationContext validationContext)
{
if (Age < 18)
{
yield return new ValidationResult("年龄至少18岁以上", new String[]{
"Age"});
}
}
}
}
 

让model实现了IValidatableObject,在model层自定义验证逻辑和错误信息。

 

  HomeController

using System.Security.Cryptography;
using System.Web;
using System.Web.Mvc;
using XHelent.Models;
 
namespace XHelent.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new Registration());
}
 
[HttpPost]
public PartialViewResult Index(Registration model)
{
if (ModelState.IsValid)
{
RNGCryptoServiceProvider csp = new RNGCryptoServiceProvider();
byte[] registrationBytes = new byte[16];
csp.GetBytes(registrationBytes);
model.RegisrationUniqueId = Convert.ToBase64String(registrationBytes);
return PartialView("Success", model);
}
else
{
return PartialView("FormContent", model);
}
}
 
}
}
 

无论验证成功或失败,都返回强类型部分视图。

 

  Home/Index.cshtml视图

@model XHelent.Models.Registration
 
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
 

当前时间:@DateTime.Now.ToShortDateString()

 
@{Html.RenderPartial("FormContent");}
 
 

  Home/FormContent.cshtml部分视图

@model XHelent.Models.Registration
 
@{
AjaxOptions options = new AjaxOptions
{
HttpMethod = "Post",
UpdateTargetId = "formContent" //可忽略
};
}
 
.field-validation-error {
color: red;
}
 
 
@using (Ajax.BeginForm(options))
{
登记
 
@Html.LabelFor(model => model.Name)
 
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
 
 
@Html.LabelFor(model => model.Age)
 
@Html.EditorFor(model => model.Age)
@Html.ValidationMessageFor(model => model.Age)
 
 
 
 
}
 

  Home/Success.cshmtl视图

@model XHelent.Models.Registration
 

恭喜,注册成功了!

注册号为:@Model.RegisrationUniqueId

 
没有填写效果:

 

年龄小于18效果:

 

输入正确效果:

==总结

使用Ajax.BeginForm()虽然可以实现异步提交并验证,但,如果放到后台管理系统的背景下,返回部分视图可能不是很方便。

转载地址:http://zoexx.baihongyu.com/

你可能感兴趣的文章
用XSLT和XML改进Struts
查看>>
WEB测试—功能测试
查看>>
在react或vue中,for循环用Index作为key值是好还是坏呢?
查看>>
2014.10.1 Form中显示pdf文件
查看>>
【进阶修炼】——改善C#程序质量(9)
查看>>
那些闪亮的日子之二
查看>>
WAR文件
查看>>
Shell 的变量(转)
查看>>
dict
查看>>
面向对象之继承与派生
查看>>
vim 编辑器常用命令
查看>>
python中IO多路复用、协程
查看>>
Java几款性能分析工具的对比
查看>>
如何隐藏所有的导航栏
查看>>
QQ 的登录封面是怎么设计的
查看>>
eas之Uuid和BOSUuid 区别
查看>>
大数据培训:小白如何学好大数据
查看>>
一些看起来有用但没用过的函数
查看>>
解释清楚智能指针二【用自己的话,解释清楚】
查看>>
【Javascript第二重境界】序
查看>>