ASP.NET Core Bind

原创 Laughing  2017-10-29 17:21  阅读 180 次 评论 0 条

有时候,我们界面上的字典不需要通过绑定的方式传值到后台,比如我们Product的Price属性如果不需要显示金额,但是窗体却被篡改成含有Price的方式,这样如果我们把Product传到服务端时,就会导致金额被修改的错误。为了解决诸如此类的问题,我们可以通过Bind属性处理字段绑定问题。

设置需要绑定的属性

通过include设置需要进行Binding的属性。

通过Action设置
  1. [HttpPost]  
  2.         public IActionResult Index([Bind(include:"Price")]Product product)  
  3.         {  
  4.             /* 
  5.             if (ModelState.ContainsKey("ProductName")) 
  6.             { 
  7.                 if (ModelState["ProductName"].Errors.Count() > 0) 
  8.                 { 
  9.  
  10.                 } 
  11.             } 
  12.             if(ModelState.ContainsKey("Price")){ 
  13.                 if(ModelState["Price"].Errors.Count()>0){ 
  14.                     Console.WriteLine(ModelState["Price"].Errors.Count()); 
  15.                 } 
  16.             } 
  17.             if(product.Price - 10 >0){ 
  18.                 ModelState.AddModelError("Price","金额不能大于10"); 
  19.             } 
  20.             */  
  21.             ModelState.Clear();  
  22.             ModelState.ClearValidationState("Price");  
  23.             if (ModelState.IsValid)  
  24.             {  
  25.                 ViewBag.Price = product.Price ;  
  26.             }  
  27.   
  28.             return View();  
  29.         }  

这样就只会获取到Price的属性,其他属性就忽略调。

设置实体类绑定

通过Action的方式设置属性的话,我们每一个action都需要进行单独设置,我们可以通过设置实体类的Bind属性,进行批量设置,在实体类上面设置的Bind对所有的Action都会起作用。

  1. using System;  
  2. using System.ComponentModel.DataAnnotations;  
  3. using Microsoft.EntityFrameworkCore.Metadata.Internal;  
  4. using System.ComponentModel.DataAnnotations.Schema;  
  5. using NetCoreStudy.WebUI.Extensions.Attribute.Validate;  
  6. using Microsoft.AspNetCore.Mvc;  
  7. using StackExchange.Redis;  
  8.   
  9. namespace NetCoreStudy.WebUI.Entity  
  10. {  
  11.     [Bind(include:"Price")]  
  12.     public class Product  
  13.     {  
  14.         [Key]  
  15.         public string ProductID { getset; }  
  16.   
  17.         [RegularExpression(@"^a-zA-Z'-'\s{1,20}$")]  
  18.         public string ProductCode { getset; }  
  19.   
  20.         [StringLength(50,ErrorMessage="{0的长度必须介于{2}到{1}",MinimumLength=4)]  
  21.         [Display(Name="产品名称")]  
  22.         public string ProductName { getset; }  
  23.   
  24.         public string Catagory { getset; }  
  25.   
  26.         public string Supplier { getset; }  
  27.   
  28.         [PriceValidate(MinPrice = 9)]  
  29.         [Required(ErrorMessage = "价格必须输入")]  
  30.         public double Price { getset; }  
  31.     }  
  32. }  
本文地址:https://www.lisen.me/asp-net-core-bind.html
版权声明:本文为原创文章,版权归 木子网 所有,欢迎分享本文,转载请保留出处!

发表评论


表情