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("新增失败
" + 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 = "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("修改失败
" + 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; }            
         */
    }
}



原文地址:https://www.cnblogs.com/smartsmile/p/6234067.html