• 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; }            
             */
        }
    }
    



  • 相关阅读:
    算法笔记 第11章 提高篇(5) --动态规划专题 学习笔记
    算法笔记 上机训练实战指南 第10章 提高篇(4)--图算法专题 学习笔记
    算法笔记 第10章 提高篇(4) --图算法专题 学习笔记
    算法笔记 上机训练实战指南 第9章 提高篇(3)--数据结构专题(2) 学习笔记
    算法笔记 第9章 提高篇(3) --数据结构专题(2) 学习笔记
    算法笔记 上机训练实战指南 第8章 提高篇(2)--搜索专题 学习笔记
    算法笔记 第8章 提高篇(2) --搜索问题 学习笔记
    算法笔记 上机训练实战指南 第7章 提高篇(1)--数据结构专题(1) 学习笔记
    算法笔记 上机训练实战指南 第6章 C++标准模板库(STL)介绍 学习笔记
    算法笔记 上机训练实战指南 第5章 入门篇(3) --数学问题 学习笔记
  • 原文地址:https://www.cnblogs.com/smartsmile/p/6234067.html
Copyright © 2020-2023  润新知