2017年11月30日 星期四

【Jquery Validate and Unobtrusive )】有趣的 驗證機制 發生 'settings' of undefined

有趣的 驗證機制 發生 'settings' of undefined

在 ASP.MVC 上 頁面提供 驗證 輸入機制

Jquery.Validate (Jquery Validate)

Jquery.Validate.Unobtrusive (Jquery Validate Unobtrusive)

HTML 屬性中  有   data-val="true" 就會去啟用 Jquery.Validate.Unobtrusive  機制
Jquery.Validate.Unobtrusive取代掉Jquery.Vlidate error 錯誤訊息顯示位置

會相對應對照 error 訊息 如下
data-valmsg-for="Name" data-valmsg-replace="true"


並且也會對應到 錯誤訊息總覽(data-valmsg-summary) ,如果你頁面有的話 如下:
【無法送出原因如下】



如果沒有 data-val="true"
會變成 Jquery.Validate 處理

就會直接在你的 驗證INPUT 下新增一個 error label 錯誤訊息

如果你頁面上沒有任 屬性有  required

但你另在 JavaScript 上新增

$("#Name").rules('add', {
                required: true,
                messages:{
                    filecheckvalidation: "身分證-正面(必填)"
                }
            });


就會發生 錯誤 Jquery.Validate.js 錯誤 如下:

jquery.validate.js:147 Uncaught TypeError: Cannot read property 'settings' of undefined
    at n.fn.init.rules (jquery.validate.js:147)
    at HTMLDocument. (Index:518)
    at i (jquery-1.12.4.min.js:2)
    at Object.fireWith [as resolveWith] (jquery-1.12.4.min.js:2)
    at Function.ready (jquery-1.12.4.min.js:2)
    at HTMLDocument.K (jquery-1.12.4.min.js:2)


因為沒你有啟用 Jquery.validate.js init 機制

必需在 javascript 中先提供 以下指令才會啟用

$("#MyForm").validate(); <--- id="" span="">

2017年11月27日 星期一

【ASP.NET MVC 5】Checkbox 多選 Required 問題

【ASP.NET MVC 5】Checkbox 多選 Required 問題

可參考以下文章:
http://blog.darkthread.net/post-2011-09-02-jquery-validate-ubnotrusive-checkbox-required.aspx

http://blog.degree.no/2012/03/validation-of-required-checkbox-in-asp-net-mvc/

http://itmeze.com/2010/12/06/checkbox-has-to-be-checked-with-unobtrusive-jquery-validation-and-asp-net-mvc-3

我的做法
單選就 radiobutton
複選就 checkbox 搭配 ValidationAttribute 使用
但我不使用 boolearn  model 搭配 List

至於單選的 CheckBox 呢???嘿嘿嘿

SERVER 跟 CLIENT 都新增

【SERVER   擴充】
public class CheckBoxRequiredAttribute : ValidationAttribute, IClientValidatable
    {

        public CheckBoxRequiredAttribute()
        {

        }


        public override bool IsValid(object value)
        {
            bool result = false;
            if (value == null)
                return result;

            List r = value as List;
            if (r != null && r.Count > 0)
                result = true;

            return result;
        }

        public IEnumerable GetClientValidationRules(
            ModelMetadata metadata,
            ControllerContext context)
        {
            var rule = new ModelClientValidationRule()
            {
                ValidationType = "checkboxrequired",
                ErrorMessage = String.Format("{0} 欄位是必要項。", metadata.DisplayName)
            };

            yield return rule;
        }

    }

【CLIENT 擴充】
$.validator.unobtrusive.adapters.add("checkboxrequired", function (options) {