中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

愛上MVC系列(lie)~前端驗證(zheng)(zheng)與(yu)后端數(shu)據有效性驗證(zheng)(zheng)

回到目錄

有(you)(you)一(yi)句(ju)話,在(zai)10年前(qian)(qian)就是(shi)真理,到現(xian)(xian)在(zai)也一(yi)直都是(shi),“前(qian)(qian)端(duan)(duan)驗證可以(yi)沒有(you)(you),但后(hou)端(duan)(duan)驗證必(bi)須要(yao)有(you)(you)”,這句(ju)話相信大(da)家都沒有(you)(you)意見(jian)吧(ba),前(qian)(qian)端(duan)(duan)驗證一(yi)般指(zhi)通過(guo)JS方式實現(xian)(xian)的,友(you)好的,個性(xing)的驗證方式,而后(hou)端(duan)(duan)驗證是(shi)指(zhi)從(cong)表(biao)單提交過(guo)來,要(yao)進行入庫之前(qian)(qian)的,數據(ju)有(you)(you)效性(xing)的驗證,它(ta)不需要(yao)有(you)(you)美麗的外表(biao),它(ta)需要(yao)有(you)(you)的僅(jin)(jin)僅(jin)(jin)是(shi)“有(you)(you)效”!

下面我將到(dao)MVC環境(jing)里的前端(duan)驗(yan)證和后端(duan)驗(yan)證作一(yi)個詳細的說明(ming),一(yi)個使用上的說明(ming)。

前端驗證(KnockoutJs實現)

  //創建(jian)訂單使用knockoutJs
    var CreateOrder = function () {
        var self = this;
        self.productid = ko.observable().extend({
            required: true
        });
        self.productname = ko.observable().extend({
            required: true
        });
        self.username = ko.observable().extend({
            required: true
        });
        self.price = ko.observable().extend({
            required: true,
            min: { params: 1, message: "價格要是大于(0)的整數!" }
        });
        self.count = ko.observable().extend({
            required: true,
            min: { params: 1, message: "您最少也要買一個吧!" },
            max: { params: 100, message: "最大一次只能買(100)個!" }
        });
        self.Do = function () {//ko方法(fa)名需要(yao)是大寫的
            self.errors = ko.validation.group(self);
            if (self.isValid()) {
                $.ajax({
                    url: "/order/doOrder",
                    type: "POST",
                    data: { productid: self.productid(), productname: self.productname(), price: self.price(), count: self.count(), username: self.username() },
                    success: function (data) {
                        if (data.code == 1) {
                            location.href = location.href;
                        }
                        else
                            alert(data.code);
                    }
                })

            } else {
                self.errors.showAllMessages();
            }
        }
    }
    ko.applyBindings(new CreateOrder());

后端驗證(數據實體有效性驗證和ViewModel業務規則驗證)

在這里(li)多(duo)說兩句,數據實體有效性(xing)驗證(zheng)是指(zhi)和數據表(biao)相關的(de)(de)驗證(zheng)規則(ze),如你(ni)的(de)(de)UserName字段(duan)長(chang)(chang)度為128字符,那么,你(ni)的(de)(de)實體驗證(zheng)的(de)(de)長(chang)(chang)度就是128,而ViewModel業(ye)務(wu)規則(ze)驗證(zheng)是指(zhi)針對具(ju)體業(ye)務(wu)設(she)計的(de)(de)視圖模型,如用戶注冊模塊(kuai),在這個(ge)模塊(kuai)里(li),你(ni)的(de)(de)UserName被產品經理規則(ze)為50個(ge)字符,那么,你(ni)的(de)(de)這個(ge)業(ye)務(wu)規則(ze)驗證(zheng)的(de)(de)長(chang)(chang)度就是50,當然(ran),你(ni)的(de)(de)其它業(ye)務(wu)可(ke)能也用到了UserName字段(duan),而它的(de)(de)業(ye)務(wu)規則(ze)當然(ran)可(ke)以不同,這就是有效性(xing)和業(ye)務(wu)規則(ze)。

下面(mian)代碼是一個返回(hui)Json結(jie)果的Post請(qing)求方法,代碼如下

        public JsonResult DoOrder(int productid, string username, string productname, decimal price, int count)
        {

            var entity = new Entity.Order_Info
            {
                TotalPrice = price * count,
                UserId = userid,
                UserName = username,
                AddDate = DateTime.Now,
                Info = "用戶下單",
                Order_Detail = new List<Order_Detail> { new Order_Detail { Count = count, ProductId = productid, ProductName = productname, SalePrice = price } }
            };

            if (productid <= 0)
            {
                ModelState.AddModelError("ProductId", "商(shang)品(pin)ID不合法...");
            }

            #region 在action里拼接ModelState錯誤消息
            var errors = new StringBuilder();
            foreach (string key in ViewData.ModelState.Keys)
            {
                ModelState modelState = ViewData.ModelState[key];
                foreach (ModelError error in modelState.Errors)
                {
                    errors.Append(error.ErrorMessage + ",");
                }

            }
            #endregion

            if (entity.IsValid && ModelState.IsValid)
                orderService.DoOrder(entity);
            else
                return Json(new { code = entity.GetRuleViolationMessages() + errors });

            return Json(new { code = 1 });
        }

回到目錄

posted @ 2014-11-17 22:04  張占嶺  閱讀(6100)  評論(2)    收藏  舉報