내 편집 VIEW 에서 다음 코드가 있습니다.
<div class="form-group">
@Html.LabelFor(model => model.CREATED, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.CREATED, new { htmlAttributes = new { @class = "form-control", @readonly = true } })
@Html.ValidationMessageFor(model => model.CREATED, "", new { @class = "text-danger"})
</div>
</div>
보시다시피 Created
텍스트 상자는 읽기 전용이며 회색으로 표시됩니다.
내 모델 에는 다음이 있습니다.
public Nullable<System.DateTime> CREATED { get; set; }
문제는 커서를 회색으로 표시된 필드에 넣은 다음 다른 필드로 이동할 때 유효성 검사가 잘못 실행된다는 것입니다.
이 문제를 어떻게 해결합니까?
클라이언트 측 유효성 검사 오류의 이유는 속성에 대한 텍스트 상자를 생성했으며 기본적 jquery.validate.js
으로 MM/dd/yyyy
형식에 따라 날짜의 유효성을 검사하는 반면 형식은 dd/MM/yyyy
. 후속 질문$.validator
에 대한 답변에 설명 된 대로을 재정의 할 수 있습니다 .
그러나 실제 문제는 'Create Date'(또는 'Modified Date') 속성에 대한 양식 컨트롤을 생성해서는 안된다는 것입니다. 이러한 값은 개체를 저장하기 직전에 컨트롤러 POST 메서드에서만 설정해야합니다.
보기에서 기존 개체를 편집하는 경우
<div>@Html.DisplayFor(m => m.CREATED)</div>
날짜를 표시하고 필요한 경우 다른 텍스트 상자처럼 보이도록 div 서식을 지정할 수 있습니다. 또한 관련 ValidationMessageFor()
및 LabelFor()
(더 이상 관련 양식 컨트롤이 없으므로 <label>
요소가 적절하지 않습니다. 그냥 사용할 수 있습니다 (예 :) <span>@Html.DisplayNameFor(m => m.CREATED)</span>
)
의 값을 제출하려는 경우 값에 CREATED
숨겨진 입력을 포함 할 수도 있습니다 (기본적으로 숨겨진 입력은 유효성이 검사되지 않음).
@Html.HiddenFor(m => m.CREATED) // you can use a [DisplayAttribute] for formatting the value
그러나 데이터를 편집하기 때문에 데이터 모델이 아닌 보기 모델 을 사용해야합니다 . POST 메서드에서는 ID를 기반으로 저장소에서 원본 데이터 모델을 가져오고 뷰 모델의 값을 기반으로 속성을 업데이트합니다 (해당 값을 업데이트 할 필요가 없기 때문에 숨겨진 입력이 필요하지 않게 됨). . 이 패턴은 또한 요청을 변경하고 날짜에 대해 변경된 값을 다시 보낼 수있는 악의적 인 사용자로부터 사용자를 보호합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다