文档章节

MVC使用jQuery从视图向控制器传递Model,数据验证,MVC HTML辅助方法小结

深圳大道
 深圳大道
发布于 2016/12/29 15:36
字数 1100
阅读 1
收藏 0
//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; }            
         */
    }
}

本文转载自:http://blog.csdn.net/smartsmile2012/article/details/52337435

深圳大道
粉丝 3
博文 877
码字总数 0
作品 0
深圳
架构师
私信 提问
asp.net core系列 45 Web应用 模型绑定和验证

一. 模型绑定   ASP.NET Core MVC 中的模型绑定,是将 HTTP 请求中的数据映射到action方法参数。 这些参数可能是简单类型的参数,如字符串、整数或浮点数,也可能是复杂类型的参数。 当 MV...

花阴偷移
03/20
0
0
ASP.NET MVC 5 -从控制器访问数据模型

在本节中,您将创建一个新的类,并在这个Controller类里编写代码来取得电影数据,并使用视图模板将数据展示在浏览器里。 在开始下一步前,先Build一下应用程序(生成应用程序)(确保应用程序编...

葡萄城控件技术团队
2014/06/11
0
0
分享16个javascript&jQuery的MVC教程

日期:2011/12/19 来源:GBin1.com 2011即将过去我们将在几周后迎来新的一年。 这里我们将介绍10多个js和jQuery的MVC教程希望大家喜欢! jQuery MVC 1. AJAX - Spring MVC 3和jQuery的整合 ...

gbin1
2011/12/21
5.6K
5
你的第一杯Web 2.0 —— 快速浏览jQuery、Spring MVC和XStream/J...

不再有页面刷新:使用jQuery 相关厂商内容 免费迷你书下载:Flex入门指南——PHP开发者 Flash Builder 4 Beta和FlexUnit下的测试驱动开发 下载Flex 4 SDK,构建超级棒的Flex应用 使用Pixel B...

李长春
2011/09/15
0
0
Web前端框架与类库的思考

说起前端框架,我也是醉了。现在去面试或者和同行聊天,动不动就这个框架碉堡了,那个框架好犀利。   当然不是贬低框架,只是有一种杀鸡焉用牛刀的感觉。网站技术是为业务而存在的,除此毫...

小近
2014/11/03
2.8K
14

没有更多内容

加载失败,请刷新页面

加载更多

跨域的理解,以及解决方案!

/*什么是跨域? * 跨域的主要原因是浏览器的同源策略。 * =>>所谓的同源策略就是A网页设置的 Cookie,B网页不能打开,除非这两个网页"同源"。 * 什么是同源? * =>>同源就是协议相同、域名相同...

流年那么伤
27分钟前
4
0
Nginx配置try_files,php无法获取$_GET参数

平时开发都是用LNMP,新安装的虚拟机在配置nginx的rewrite的时候使用try_files命令。但是在写的时候配置成“try_files $uri $uri/ /index.php?q=args;”, 在PHP的web程序中,打印$_GET为空。...

叫我哀木涕
27分钟前
3
0
【原创】Microsoft Edge可以用localhost访问但无法用IP访问

Microsoft Edge可以用localhost和127.0.0.1访问但无法用本机IP访问, chrome ie都可以推测是edge的问题,网络是专用网络,防火墙也关了: 在edge里 按F12 以在控制台里看到这句 CONSOLE21301...

shzwork
28分钟前
1
0
Python利用数学方程式画4种不一样的心型图案

前言 下面这四个心型图案,是通过科学地计算,根据数学方程式生成的,虽然做的不是特别完美,但是基本的还是能实现的 第一个心型 结果图 第二心型 结果图 学习从来不是一个人的事情,要有个相互监...

A_裙232550246
28分钟前
1
0
微信带场景参数的二维码生成与使用?

微信公众号推广时,用户通过扫二维码关注公众号,需要统计用户是通过谁的二维码进行关注。 在用户扫码关注公众号时,二维码带上推广者的参数,在关注公众号后,获取到该推广者的参数。 目前有...

wxgzhgncj
28分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部