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

本文共 2365 字,大约阅读时间需要 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()虽然可以实现异步提交并验证,但,如果放到后台管理系统的背景下,返回部分视图可能不是很方便。

转载于:https://www.cnblogs.com/darrenji/p/3583016.html

你可能感兴趣的文章
简单工厂模式
查看>>
#hashMap冲突原理#详细
查看>>
基于单片机定时器---年月日时分秒的算法
查看>>
linux中IDE和SATA硬盘的区别
查看>>
关于清理缓存的解决方案
查看>>
编译时获得系统的日期和时间
查看>>
Unity3D写雷电游戏(一)
查看>>
Mybatis之使用注解开发CRUD
查看>>
C语言错误:request for member ‘xxx’ in something not a structure or union
查看>>
[LintCode] Pow(x, n) 求x的n次方
查看>>
冒泡排序逐步详解相关笔记(一)
查看>>
sql server split 分割 两种方法
查看>>
spring学习之@ModelAttribute运用详解
查看>>
语义分析应用——美通社
查看>>
数据类型及操作
查看>>
提高前端开发效率的N种方法
查看>>
第一个Vus.js
查看>>
10款最好的Python IDE
查看>>
js如何获取样式?
查看>>
保护视力最佳电脑窗口颜色配置Win7、Vista和XP适用!转
查看>>