zoukankan      html  css  js  c++  java
  • 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; }            
             */
        }
    }
    



  • 相关阅读:
    多个类定义attr属性重复的问题:Attribute "xxx" has already been defined
    好用的批量改名工具——文件批量改名工具V2.0 绿色版
    得到ImageView中drawable显示的区域的计算方法
    得到view坐标的各种方法
    实现类似于QQ空间相册的点击图片放大,再点后缩小回原来位置
    Material Designer的低版本兼容实现(五)—— ActivityOptionsCompat
    Android 自带图标库 android.R.drawable
    解决 Attempting to destroy the window while drawing!
    解决Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 4
    Material Designer的低版本兼容实现(四)—— ToolBar
  • 原文地址:https://www.cnblogs.com/smartsmile/p/6234067.html
Copyright © 2011-2022 走看看