asp.net core 3.1 MVC를 사용하는 프로젝트가 있습니다. 선택이 비활성화 된 양식이 포함되어 있습니다.
<div class="col-12 mb-3">
<select asp-for="SelectableItem" class="multi-select form-control" id="selectedItem" disabled="disabled" required="required">
<option value="">-- Select Item --</option>
</select>
<span asp-validation-for="SelectableItems" class="text-danger"></span>
</div>
완전히 렌더링 된 HTML
<select class="multi-select form-control" id="selectedItem" disabled="" required="required"
data-val="true" data-val-required="Selected Item is required"
name="SelectedItem">
<option value="">-- Select Item --</option>
</select>
이 선택은 사용자가 확인란을 선택한 다음 선택 요소를 채우고 활성화 할 때까지 비활성화됩니다. 컨텐츠가 와트에 따라 달라짐 확인란이 선택 되었기 때문입니다.
사용자가 양식을 제출하려고 할 때 JQuery.Validation.Unobtrusive의 유효성 검사는 해당 필드가 필요하기 때문에 비활성화 된 필드를 제외한 모든 유효성을 검사하지만 유효성도 검사하고 싶습니다.
해당 양식에 대해서만 활성화하기를 원하므로 응용 프로그램 전체에서 비활성화 된 모든 요소가 작동하지 않는 것 같습니다.
나는 다음과 몇 가지 변형을 시도했습니다.
$('form').validator.setDefaults({ignore: null})
$('form').data('validator').settings.ignore = "";
$('form').validator.setDefaults({ignore: []})
$('#selectableItem').Validate().settings.not('[disabled]')
이것들 중 아무것도하지 않는 것 같고 비활성화 된 선택은 유효성 검사를 거부하며 읽기 전용과 같은 다른 모든 제안은 선택 요소에서 작동하지 않으며 다른 양식을 엉망으로 만들 수 있으므로 전역 적으로 허용되기를 원하지 않습니다.
비활성화 된 모든 양식 필드의 유효성을 검사하려는 경우 플러그인의 관련 행은 다음과 같습니다.
.not( ":submit, :reset, :image, :disabled" )
다음 단계를 따르십시오.
1. jquery.validate.js
프로젝트에서를 찾습니다 .
2. js를 열고 ctrl
+ F
를 눌러이 줄에 disabled
주석이 포함 된 줄을 찾습니다 (또는 :disabled
이 줄에서 제거 할 수 있음 ).
3. 기본 asp.net 코어 프로젝트를 사용하는 경우 _ValidationScriptsPartial.cshtml
.이 뷰에 대한 참조를 추가하기 때문에 jquery.validate.min.js
변경해야합니다. jquery.validate.js
(여전히 min.js를 사용하려면 문서 를 읽고 번들 방법을 알아보십시오. 정적 자산 축소) :
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script> //change here...
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
다음은 작동하는 데모입니다.
모델 ( [Required]
속성 추가 ) :
public class Test
{
[Required] //add this
public string SelectableItem { get; set; }
}
보기 (제거 required="required"
) :
@model Test
<form method="post">
<input type="checkbox" />
<div class="col-12 mb-3">
<select asp-for="SelectableItem" class="multi-select form-control" id="selectedItem" disabled="disabled">
<option value="">-- Select Item --</option>
</select>
<span asp-validation-for="SelectableItem" class="text-danger"></span>
</div>
<input type="submit" value="Create" />
</form>
@section Scripts
{
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
<script>
$(document).ready(function () {
$('input:checkbox').change(function () {
if (this.checked) {
//add to select list
$("#selectedItem").append($("<option></option>")
.attr("value", "1")
.text("aa"));
$("#selectedItem").append($("<option></option>")
.attr("value", "2")
.text("bb"));
$("#selectedItem").append($("<option></option>")
.attr("value", "3")
.text("cc"));
// $("selectedItem").prop('required', true);
$("#selectedItem").removeAttr('disabled');
}
else {
//remove item from select list
$("#selectedItem").empty().append($("<option></option>")
.attr("value", "")
.text("-- Select Item --"));
$("#selectedItem").prop('disabled', true);
}
});
});
</script>
}
결과:
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다