MVC使用jQuery从视图向控制器传递Model,数据验证,MVC HTML辅助方法小结
//MVC HTML辅助类常用方法记录 (1)@Html.DisplayNameFor(model => model.Title)是显示列名, (2)@Html.DisplayFor(modelItem => item.Title)是显示列的内容 (3)@Html.ActionLink("Create New", "Create")是超链接,跳转到model中的create页面,引用的是controller中create方法; (4)@Html.ActionLink("Edit", "Edit", new { id=item.ID })编辑页面; (5)@using (Html.BeginForm()) { @Html.ValidationSummary(true)}用于客户端验证,其Html.BeginForm()表示在本页显示 (6)<div class="editor-label">
@Html.LabelFor(model => model.Time)标签
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Time)编辑框
@Html.ValidationMessageFor(model => model.Time)验证合法性错误显示
</div> /***************************************************/
/****MVC使用jQuery从视图向控制器传递Model的方法*****/
/***************************************************/ //Entity
using System.ComponentModel.DataAnnotations;
namespace MvcApplication1.Models
{
public class Movie
{
public int Id { get; set; }
[Required(ErrorMessage = "必填")]
public string Title { get; set; }
}
} //Controller
using System.Web.Mvc;
using MvcApplication1.Models;
namespace MvcApplication1.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new Movie());
} public ActionResult AddMovie(Movie movie)
{
return Json(new {msg = "ok"});
} }
} //View
@model MvcApplication1.Models.Movie
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2> @using (Html.BeginForm("AddMovie", "Home", FormMethod.Post))
{
@Html.EditorFor(m => m.Title)
@Html.ValidationMessageFor(m => m.Title)
<br/>
<input type="button" id="addMovie" value="提交"/>
} @section scripts
{
<script src="~/Scripts/jquery.validate.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.js"></script>
<script type="text/javascript">
$(function() {
$('#addMovie').click(function(e) {
//e.preventDefault();
if ($('form').valid()) {
$.ajax({
url: $('form').attr('action'),
type: $('form').attr('method'),
data: $('form').serialize(),
success: function(data) {
if (data.msg == 'ok') {
alert('提交成功');
}
}
});
}
});
});
</script>
}
/*=====================================
View新增商品
=====================================*/
@using System.Web.Optimization
@model MultiPageSimpleTask.Entitys.Product @{
ViewBag.Title = "title";
Layout = null;
}
@Scripts.Render("~/Bundles/vendor/js/bottom")
<script type="text/javascript">
$(function() {
//新增商品
$("#addBtn")
.click(function() {
alert($('form').serialize());
$.ajax({
url: $('form').attr('action'),
type: $('form').attr('method'),
data: $('form').serialize(),
success: function(data) {
var result = data;
if (result.Status) {
alert("新增成功");
//top.window.location = '/Home/Index';
} else {
alert("新增失败\n" + result.Message);
}
}
});
});
});
</script> <h2>title</h2>
@using (Html.BeginForm("add", "home", FormMethod.Post))
{
@Html.DisplayNameFor(m => m.ProductName)
@Html.TextBoxFor(m => m.ProductName,new { style = "width:100px;",@class="class1" })
<br/>
@Html.DisplayNameFor(m => m.Discontinued)
@Html.RadioButtonFor(m => m.Discontinued, true, new {@checked = true})
@Html.RadioButtonFor(m => m.Discontinued, false)
<br/>
<br/>
<input type="button" id="addBtn" value="新增商品"/>
} /*=====================================
View修改商品
=====================================*/
@using System.Web.Optimization
@model MultiPageSimpleTask.Entitys.Product @{
ViewBag.Title = "title";
Layout = null;
}
@Scripts.Render("~/Bundles/vendor/js/bottom")
<script type="text/javascript">
$(function() {
//修改商品
$("#updateBtn")
.click(function () {
alert($('form').serialize());
$.ajax({
url: $('form').attr('action'),
type: $('form').attr('method'),
data: $('form').serialize(),
success: function(data) {
var result = data;
if (result.Status) {
alert("修改成功");
//top.window.location = '/Home/Index';
} else {
alert("修改失败\n" + result.Message);
}
}
});
});
}); </script> <h2>title</h2>
@using (Html.BeginForm("update", "home", FormMethod.Post))
{
@Html.DisplayNameFor(m => m.ProductName)
@Html.TextBoxFor(m => m.ProductName)
<br />
@Html.DisplayNameFor(m => m.Discontinued)
@Html.RadioButtonFor(m => m.Discontinued, true)
@Html.RadioButtonFor(m => m.Discontinued, false)
<br />
<br />
<input type="button" id="updateBtn" value="修改商品" />
} /*=====================================
Controller控制器
=====================================*/
#region 新增商品
[HttpGet]
public ActionResult Add()
{
Entitys.Product product = new Entitys.Product();
return View(product);
} [HttpPost]
public ActionResult Add(Entitys.Product model)
{
_result.Status = false;
//TODO:Convert to DTOs
if (!ModelState.IsValid)
{
_result.Message = ExpendErrors(this);
}
else
{
int i = _productAppService.InsertAndGetId(model); //新增
if (i > 0)
{
_result.Status = true;
}
}
return new JsonResult() { Data = _result };
}
#endregion #region 修改商品 [HttpGet]
public ActionResult Update(int id)
{
var model = _productAppService.Get(id);
return View(model);
} [HttpPost]
public ActionResult Update(Entitys.Product model)
{
_result.Status = false;
//TODO:Convert to DTOs
if (!ModelState.IsValid)
{
_result.Message = ExpendErrors(this);
}
else
{
var modelTarget = _productAppService.Get(model.Id); //赋值
modelTarget.ProductName = model.ProductName; //更新字段
modelTarget.Discontinued = model.Discontinued;
int i = _productAppService.InsertOrUpdateAndGetId(modelTarget); //新增
if (i > 0)
{
_result.Status = true;
}
}
return new JsonResult() { Data = _result };
} #region 返回消息类
/// <summary>
/// 返回信息类
/// </summary>
public class StatusMsg
{
/// <summary>
/// 返回状态 true false
/// </summary>
public bool Status;
/// <summary>
/// 返回信息
/// </summary>
public string Message;
/// <summary>
/// 返回扩展信息 如400、401状态码
/// </summary>
public string Ext;
}
#endregion #region 获取验证信息
public static string ExpendErrors(Controller controller)
{
System.Text.StringBuilder sbErrors = new System.Text.StringBuilder();
foreach (var item in controller.ModelState.Values)
{
if (item.Errors.Count > 0)
{
for (int i = item.Errors.Count - 1; i >= 0; i--)
{
sbErrors.AppendLine(item.Errors[i].ErrorMessage);
}
}
}
return sbErrors.ToString();
}
#endregion
}
#endregion /*=====================================
Entity实体类数据
=====================================*/
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Abp.Domain.Entities; namespace MultiPageSimpleTask.Entitys
{
[Table("Product")]
public class Product : Entity
{
/// <summary>
/// ProductName
/// </summary>
[Display(Name = "商品名称")]
[Required(ErrorMessage= "商品名称不能为空")]
public virtual string ProductName { get; set; } /// <summary>
/// SupplierID
/// </summary>
public virtual int? SupplierID { get; set; } /// <summary>
/// CategoryID
/// </summary>
public virtual int? CategoryID { get; set; } /// <summary>
/// QuantityPerUnit
/// </summary>
public virtual string QuantityPerUnit { get; set; } /// <summary>
/// UnitPrice
/// </summary>
public virtual decimal? UnitPrice { get; set; } /// <summary>
/// UnitsInStock
/// </summary>
public virtual Int16? UnitsInStock { get; set; } /// <summary>
/// UnitsOnOrder
/// </summary>
public virtual Int16? UnitsOnOrder { get; set; } /// <summary>
/// ReorderLevel
/// </summary>
public virtual Int16? ReorderLevel { get; set; } /// <summary>
/// Discontinued
/// </summary>
[Display(Name = "发布状态")]
[Required(ErrorMessage="发布状态不能为空")]
public virtual bool? Discontinued { get; set; } /* 示例
[StringLength(10, MinimumLength = 4, ErrorMessage = "{0}的长度必须大于{2}个字符并小于{1}个字符")]
[Display(Name = "密码")]
public virtual string LogPassword { get; set; } [Display(Name = "确认密码")]
[Compare("LogPassword", ErrorMessage = "密码必须一致")]
public virtual string LogPasswordConfirm { get; set; } [Display(Name = "姓名")]
public virtual string RealName { get; set; } [Required]
[Display(Name = "登录账号")]
public virtual string LogID { get; set; } [StringLength(10, MinimumLength = 4, ErrorMessage = "{0}的长度必须大于{2}个字符并小于{1}个字符")]
[Display(Name = "密码")]
public virtual string LogPassword { get; set; } [StringLength(10, ErrorMessage = "{0}的长度不能大于{1}个字符")]
[Display(Name = "姓名")]
public virtual string RealName { get; set; } [Display(Name = "出生日期")]
[Range(typeof(DateTime), "2011-12-31", "1950-1-1", ErrorMessage = "{0}的范围是{1}到{2}")]
public virtual DateTime Birthday { get; set; } [RegularExpression(@"\d{17}[\d|X]|\d{15}", ErrorMessage = "{0}的格式不正确")]
[Display(Name = "身份证号码")]
public virtual string IdentityNo { get; set; } [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}", ErrorMessage = "{0}的格式不正确")]
[Display(Name = "邮箱")]
public virtual string Email { get; set; }
*/
}
}
MVC使用jQuery从视图向控制器传递Model,数据验证,MVC HTML辅助方法小结的更多相关文章
- MVC使用jQuery从视图向控制器传递Model的2种方法
http://blog.csdn.net/make1828/article/details/29846003 using System.ComponentModel.DataAnnotations; ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 视图与控制器传递数据
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- ASP.NET MVC 数据传递 视图向控制器传递
视图向控制器传递 MVC 视图向控制器传递,就是获取用户输入的数据,在去进行操作 好了,我们不多说直接进行我们的案例. 在HomeController类中添加下来方法 [HttpPost] publi ...
- [.net 面向对象程序设计深入](6).NET MVC 6 —— 模型、视图、控制器、路由等的基本操作
[.net 面向对象程序设计深入](6).NET MVC 6 —— 模型.视图.控制器.路由等的基本操作 1. 使用Visual Studio 2015创建Web App (1)文件>新建> ...
- .NET MVC model数据验证
MVC提供了很方便的数据验证,只需要在model里加入相关的正则等,那么就会在前台里生成相关的验证脚本.需要引用两个js文件: jquery.validate.min.js jquery.valida ...
- OPEN(SAP) UI5 学习入门系列之三:MVC (下) - 视图与控制器
继续来学习UI5的MVC模型吧,这次我们来探讨视图与控制器. 1 视图 在MVC中,视图用来定义和渲染UI.在UI5中,视图的类型是可以自定义的,除了以下预定义的四种视图类型之外,你也可以定制自己的视 ...
- MVC怎么在当前视图中,传递参数给到另外一个视图?
在TransData.cshtml视图中: <div> <!--在一个视图中,请求另外一个视图,并且将数据传到另外一个视图--> <!--视图中调用无返回值的方法,需要加 ...
- MVC Model数据验证
概述 上节我们学习了Model的数据在界面之间的传递,但是很多时候,我们在数据传递的时候为了确保数据的有效性,不得不给Model的相关属性做基本的数据验证. 本节我们就学习如何使用 System.Co ...
- MVC中利用ViewBag传递Json数据时的前端处理方法
用viewBag传递Json字符串到前端时,json字符串中的“会被转义为& quot,前端处理方法为@Html.Raw(Json.Encode(ViewBag.Data)),再用eval() ...
随机推荐
- ButterKnife的安装与使用以及ButterKnife右键不显示的大坑
作为从安卓的的入门选手,第一次看到还以为是个第三方呢,从github下来之后感觉不对啊,这么多东西,后来一搜原来是个插件,而且不用从github上下载. 安装的方法很简单. 第一步:打开安卓studi ...
- Java的构造器
初始化和清理是涉及安全的两个问题.C++和Java都引入了构造器(constructor)的概念,这是一个在创建对象时被自动调用的特殊方法. 可以假想为编写的每个类都定义一个initialize()方 ...
- 使用BootStrap框架设置全局CSS样式
一.排版 标题 HTML 中的所有标题标签,<h1> 到 <h6> 均可使用.另外,还提供了 .h1 到 .h6 类,为的是给内联(inline)属性的文本赋予标题的样式. & ...
- week2-结对编程【网页实现四则运算】
题目描述: 不知道大家是否尝试过这样一种开发模式:你有一个伙伴,你们坐在一起,并肩作战,面对着同一台显示器,使用着同一键盘,同一个鼠标,你们一起思考,一起分析,一起编程?这次,就让我们来体验一下结对编 ...
- 201521123081《Java程序设计》 第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 参考资料:XMIND 1.2 选做:收集你认为有用的代码片段 2. 书面作业 本次作业题集 集合 Q1. Li ...
- java课程设计-算术运算测试
1. 团队名称.团队成员介绍 团队名称:cococo 团队成员 组长:网络1514叶城龙 201521123109 组员:网络1514余腾鑫 201521123108 2. 项目git地址 http: ...
- HashMap、HashTable、ArrayList、LinkedList、Vector区别
HashTable和HashMap区别 ①继承不同. public class Hashtable extends Dictionary implements Map public class Has ...
- Spring - Bean的概念及其基础配置
概述 bean说白了就是一个普通的java类的实例,我们在bean中写一些我们的业务逻辑,这些实例由Sping IoC容器管理着.在web工程中的spring配置文件中,我们用<bean/> ...
- birt 集成到现有的web应用中
我们已经有了一个Javaweb应用,现在要实现对报表的集成 我的应用是这个样子的 说明: 1) 这里使用的是birt4.4版本的, 下载birt-runtime-4.4.zip(在官方下载),然 ...
- python3中的编码与解码用法
#!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ = '人生入戏' #python3在编码时会把str编码成utf-8的bytes类型 ...