2015-01-25 3 views
-2

내 모델에 다른 레이블을 사용하는 'VehiclePrice'필드가 있습니다. 나는 '자동차', '트럭'또는 'SUV'의 드롭 다운 선택을 기반으로 한 3 개의 'divs'만 표시합니다. 레이블은 "Sedan Price", "Truck Price"및 "SUV Price"입니다. 저는 MVC를 처음 접했고 데이터베이스 사용자로서 같은 것을 잡기 위해 3 가지 필드를 만드는 아이디어를 좋아하지 않습니다 - "가격". "자동차 가격이 필요합니다", "트럭 가격이 10000에서 900000 사이 여야합니다", 즉 "필수"또는 "범위"메시지가 울리면 특정 레이블을 참조하는 유효성 검사 메시지가 필요합니다. 등등 대신에 "가격이 필요합니다". 왜? 같은 'div'에 다른 "Price"레이블이 있기 때문입니다. 내 지시 사항은 @Html 유효성 검사 항목을 사용해야한다는 것이 었습니다. 수정하는 것이 다소 어려워 보입니다. 메시지를 무시하거나 최소한 "Car", "Truck"또는 "SUV"를 앞에 추가하거나 추가하는 간단한 방법이 있습니까? 아니면 'data-val- *'속성 중 일부를 재정의하는 방법 일 수도 있습니다.레이블을 기준으로 유효성 검사 메시지를 변경하는 방법

+1

유효성 검사 메시지는 정적이며보기가 렌더링 될 때 구문 분석됩니다. 어떤 옵션은 (a)'VehiclePrice' 텍스트 박스의'.change' 이벤트를 처리하고,'.Valid()'를 사용하여 유효한 테스트를하고, 그렇지 않은 경우, 연관된 메시지를 업데이트하거나, (b)'change' 이벤트를 호출하고'$ .validator.messages'를 다시 작성하십시오. –

+0

이 뷰는 jquery.validate.unobtrusive와 "검도"를 사용한다고 언급 했어야합니다. 하지만 그들은 jquery에서하려고하는 모든 것을 무시하는 것 같습니다. 그리고 "마이너스 1- 에디션"이라면 누구나 ASP.NET MVC를 처음 접하는 사람들에게는 설명이 없으면 그렇게 할 수 없습니다. – McAuley

+0

그럼 이미 시도한 것을 보여주세요! –

답변

1

유효성 검사 메시지는 뷰가 처음 렌더링 될 때 jquery-validate으로 구문 분석됩니다. 선택한 차량 유형을 기반으로 VehiclePrice 속성에 대한 관련 data-val-* 속성을 변경 한 다음 유효성 검사기를 다시 구문 분석 할 수 있습니다. 선택에 대한 HTML을 가정하면

<select id="vehicletype"> 
    <option value="Car">Car</option> 
    <option value="Truck">Truck</option> 
</select> 

입니다 그런 다음 스크립트

$('#vehicletype').change(function() { 
    // Update error message 
    var message= 'The ' + $(this).val() + ' price is required'; 
    $('#VehiclePrice').attr('data-val-required', message); 
    // Reparse validator 
    $('form').data('validator', null); 
    $.validator.unobtrusive.parse($('form')); 
}); 

당신은 또한 당신이보기를 반환하는 경우에 맞게 다시 게시물에 차량 유형을 확인하고 ModelState 오류 메시지를 조정해야합니다 참고

+0

사이드 노트 :'document.ready()'에'$ ('vehicletype'). trigger ('change');를 추가하면 페이지가 처음 렌더링 될 때 오류 메시지가 업데이트됩니다. –

0

뷰 모델에 Vehicle Type 속성을 추가하고 뷰에서 bool 변수를 사용하여 document.ready 이벤트에서 JQuery를 통해 텍스트 상자를 활성화 또는 비활성화하도록 설정할 수 있습니다. 비활성화 된 변수가 false이면 텍스트 상자에 대한 유효성 검사가 무시됩니다. 각 차량 유형 div에 대해 아래 코드를 사용하십시오.

@Html.TextBoxFor(r => r.VehiclePrice, new { @type = "range", min = 10000, max = 15000 }, disabled) 
@Html.ValidationMessageFor(r => r.VehiclePrice,"Price must be between 10000 and 15,000") 
+1

오해 OP의 요구 사항! OP가 이미 그걸 가지고 있지만 메시지가 바뀔 것을 원합니다 (_ "자동차 가격 ..."_ 또는 _ "트럭 가격 ..."_) 옵션 선택에 따라 –

+0

글쎄, 그건 "범위 "그런데 어떻게"필수 "를 처리 할 수 ​​있습니까? – McAuley

+1

@McAuley, 그게 어떻게 _ 범위의 일을 처리합니다 ._ 자동차 또는 트럭을 선택한 경우 동일한 메시지가 표시됩니다. 다른 메시지를 보내겠다고 말한 경우 –

관련 문제