前提・実現したいこと
C#、ASP.NET MVC5でSelect2のオートコンプリートコンボボックスを使用していて、
モデルのValidationを有効にする方法がわからなくて困っています。
View、javascriptの動きとしては、Select2で変更したら、input hiddenの値を変更するようにしています。
ご教授をお願いします。
該当のソースコード
■ Model validation
c#
1[Required(ErrorMessage = "{0} は選択が必須です。")] // ← 有効にならない 2[Range(1, int.MaxValue, ErrorMessage = "{0} は選択が必須です。")] // ← 試してみたが有効にならない 3[Display(Name = "分類")] 4public int CategoryId { get; set; }
■ View
html
1<div class="form-group"> 2 <label class="col-md-3">@Html.DisplayNameFor(model => model.CategoryId) <span style="color: orange;">[必須]</span></label> 3 <div class="col-md-9"> 4 <!-- Select2 - Id : DisplayName) --> 5 <select id="select2CategoryId"></select> 6 @Html.HiddenFor(model => model.CategoryId)<br /> 7 <div> 8 @Html.ValidationMessageFor(model => model.CategoryId) 9 </div> 10 </div> 11 </div> 12</div>
■ javascript
javascript
1var categories = getCategories(); 2 3// select2CategoryId 4var categoryId = $("#CategoryId").val(); 5var tempCategories = getSelect2Data(categories); 6setSelect2("#select2CategoryId", tempCategories, true, false, false, "50%"); 7$("#select2CategoryId").val(categoryIdEnum).trigger("change"); 8 9$("#select2CategoryId").on("select2:select", function (e) { 10 $("#CategoryId").val($(this).val()); 11}); 12 13$("#select2CategoryId").on("select2:unselecting", function (e) { 14 $("#CategoryId").val(null); // または0に変更 15}); 16 17function getSelect2Data(data) { 18 if (data) { 19 if (Object.keys(data).length) { 20 // select2 data形式に変換 21 var array = []; 22 $.each(data, function (key, value) { 23 array.push({ id: key, text: value }); 24 }); 25 26 return array; 27 } 28 } 29 30 return null; 31} 32 33function setSelect2(select2IdName, data, allowClear, disabled, tags, width) { 34 $(select2IdName).select2({ 35 data: data, 36 37 // Select2 option here 38 allowClear: allowClear, // Clear button, default : true 39 disabled: disabled, // Disabled(display only), default : false 40 placeholder: "-- 選択 --", // Placeholder 41 tags: tags, // Dynamic input, default : false 42 width: width // 50% or 100% 43 44 // Do not open when clicking "x" 45 }).on("select2:unselecting", function (e) { 46 $(this).data("state", "unselected"); 47 }).on("select2:open", function (e) { 48 if ($(this).data("state") === "unselected") { 49 $(this).removeData("state"); 50 var self = $(this); 51 self.select2("close"); 52 } 53 }); 54}
補足情報(FW/ツールのバージョンなど)
.NET Framework 4.7.2
C#、ASP.NET MVC5
Visual Studio Express 2012 for Web
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/08/13 03:42
退会済みユーザー
2020/08/13 06:15