MVC最為標准的添加操作(從實體驗證到實體入庫)


以用戶注冊為例,來說一下MVC中向數據表中添加數據的方法

從WEB層說起:有兩個action,分別實現顯示注冊界面和提交注冊請求的作用,在action中,對表單實體進行了數據有效性的驗證,代碼如下:

public ActionResult Register()
       {
           return View();
       }

       [HttpPost]
       public ActionResult Register(UserBases entity)
       {
           if (entity.IsValid)
           {

               if (iUserRepository.RegisterUser(entity).IsComplete)
               {
                   #region 寫′cookies

                   #endregion
                   return RedirectToAction("RegSuccess", "Account");
               }
               else
               {
                   ModelState.AddModelError("", "注¢冊á用?戶§失§敗ü");
               }
           }
           else
           {
               entity.GetRuleViolations().ToList().ForEach(i =>
               {
                   ModelState.AddModelError(i.PropertyName, i.ErrorMessage);
               });
           }
           return View();
       }
省略一下BLL層,直接用DATA層了,它主要有個性操作接口和統一操作接口,一個實體操作分別要繼承這兩個接口,及一個提代數據庫上下文和CURD操作的基類,代碼如下:
public class UserRepository : Car_RentalRepositoryBase, IUserRepository
    {

        #region IUserRepository 成é員±

        public VMessage RegisterUser(UserBases entity)
        {
            VMessage vm = new VMessage();
            try
            {
                base.InsertEntity(entity);
                vm.IsComplete = true;
            }
            catch (Exception)
            {
                vm.IsComplete = false;
                throw;
            }
            return vm;

        }

}

這個類的結構如下:

image

DATA層向WEB層返回信息是統一的消息對象VMessage,它個類由一個bool型的屬性和一個實體對象組成。

最后說明一點,就是在MVC模式下,進行前台表單驗證時,直接用ModelState.AddModelError方法就可以把錯誤信息直接綁定到屬性的上面,非常方便,在調用時

代碼如下:

entity.GetRuleViolations().ToList().ForEach(i => { ModelState.AddModelError(i.PropertyName, i.ErrorMessage); });

還有一個要說明的就是GetRuleViolations這個方法,它是我們在實體中定義的,將所有不通過證明的信息,以迭代的方式進行返回,代碼如下:

/// <summary>
    /// 用戶實體數據級驗證(數據有效性驗證)
    /// </summary>
    public partial class UserBases
    {
        public override IEnumerable<RuleViolation> GetRuleViolations()
        {
            if (string.IsNullOrEmpty(this.UserID))
                yield return new RuleViolation(ValidatorMessage.Current.GetMessage(ValidatorMessageType.RequiredField, "UserID"), "UserID");
            if (string.IsNullOrEmpty(this.Email))
                yield return new RuleViolation("請輸入電子郵件", "Email");

            if (string.IsNullOrEmpty(this.Name))
                yield return new RuleViolation("用戶名不能為空", "Name");

        }

   }

大家如果對MVC實體驗證有什么好的方式可以給我留言。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM