pro asp.net mvc 2.0 프레임 워크를 읽었으며 유효성 검증을 위해 사용해야하는 부분이 약간 혼란 스럽습니다. 여기서는 동일한 코드를 계속 작성하지 않아도되는지 확인해야합니다.유효성 검사 및 Asp.net Mvc 2.0 모범 사례?
내 사이트는 거의 모든 jax와 아약스 경향이 있습니다. 그래서 저는 보통 클라이언트 쪽에서 jquery.validate를 사용했고 서버 쪽에서는 다시 검사를했습니다. 서버 측에서 실패하거나 클라이언트 측에서 테스트 할 수없는 유효성 검사 규칙이 있다면 오류 메시지를 반환합니다.
이런 식으로 몇 가지를 빨아들입니다. 먼저 오류 메시지가 클라이언트 측과 서버 측에서 동일해야합니다. 그래서 나는 항상 2 개의 중복 된 메시지를 가질 것이다.
그래서 단어의 철자를 잘못 입력하면 2 개 장소에서 단어를 변경해야한다는 것을 기억해야합니다. 둘째로 서버 측 오류를 반환하기가 어렵습니다 (대부분의 사이트는 거의 모든 아약스입니다). 그래서 내가 한 것은 항상 깃발을 확인해야한다는 것입니다.
$.post('Create',{'test',test},function(response)
{
if(response.IsValid == false)
{
// check other json parameters to get all error msgs
// add them to some div container and display to user.
}
else
{
// show success msg.
}
}):
데이터 주석을보고 있었지만 아약스 게시물을 사용하고 있기 때문에 그들이 도움이되는지 확신 할 수 없습니다.
아약스 게시물에 연결되어있는 버튼을 클릭해도 클라이언트 측 코드가 계속 표시됩니까?
전 페이지 렌더링이 필요한 html 유효성 확인 도우미를 찾는 데 의존하지 않으므로 서버 쪽 메시지가 표시되지 않을 것이라고 추측하고 있습니까?
나는 또한 그것들을 꽤 제한하고있다. 나는 당신이 당신 자신의 것을 작성할 수 있다는 것을 알고 있지만, 그것은 (서버 측과 클라이언트 측 코드를 작성하는) 많은 것으로 보인다. 특히, jquery가 제공하는 모든 것을 기본적으로 작성해야하기 때문에 그렇다.
jquery.validate (원격 jquery.validate 포함)에서 데이터 주석을 사용할 수있는 활동이 업데이트 된 라이브러리가 있습니까?
마침내이 코드의 위치를 알 수 없습니다. 이 책의 저자는 저를 혼란스럽게합니다.
그는 그는 veiw 모델로 보이는 기본적인 검증이
public class Appointment
{
[Required(ErrorMessage = "Please enter your name")] [StringLength(50)]
public string ClientName { get; set; }
[DataType(DataType.Date)] [Required(ErrorMessage = "Please choose a date")]
public DateTime AppointmentDate { get; set; }
}
있습니다. 나는 이것을 이해하지만 나를 혼란스럽게하는 것은 서비스 클래스에서 다시 기본적인 검증과 비즈니스 검증을 수행한다는 것입니다.
namespace BookingsExample.Domain.Services
{
public class AppointmentService
{
public static void CreateAppointment(Appointment appt)
{
EnsureValidForCreation(appt);
// To do: Now save the appointment to a database or wherever
}
private static void EnsureValidForCreation(Appointment appt)
{
var errors = new RulesException<Appointment>();
if (string.IsNullOrEmpty(appt.ClientName))
errors.ErrorFor(x => x.ClientName, "Please specify a name");
if (appt.AppointmentDate < DateTime.Now.Date)
errors.ErrorFor(x => x.AppointmentDate, "Can't book in the past");
else if ((appt.AppointmentDate - DateTime.Now.Date).TotalDays > 7)
errors.ErrorFor(x => x.AppointmentDate, "Can't book more than a week in advance");
if (appt.ClientName == "Steve" && appt.AppointmentDate.DayOfWeek == DayOfWeek.Saturday)
errors.ErrorForModel("Steve can't book on weekends");
if (errors.Errors.Any())
throw errors;
}
}
}
그냥 모델 층은 ASP.NET MVC에 내장 된 검증 지원을 사용 정지 것은 아닙니다 자신의 규칙을 적용하기 때문이다. 나는 ASP.NET MVC의 유효성을 메커니즘을 유용한 방어의 유용한 첫 번째 라인으로 생각하는 것이 도움이된다는 것을 안다. 클라이언트 측 유효성 검사 스크립트를 생성하는 것이 매우 효과적이다. 각 뷰 모델 클래스는 데이터 주석을 사용할 수 있습니다 : 그것은 (비즈니스 로직을 보유하지 않는 컨트롤러와 뷰와 사이 데이터를 전송하는 데에만 존재하는 간단한 뷰 특정 모델을 가진, 즉) 뷰 모델 패턴 으로 깔끔하게 에 맞는 클라이언트 측 구성을위한 특성그래도 도메인 계층이 사용자 인터페이스를 신뢰하여 비즈니스 규칙을 적용해서는 안됩니다. 실제 적용 코드는 을 사용하여 도메인에 들어가야합니다. 마치 과 같은 기술을 사용합니다. *
- 이 프로의 asp.net MVC 2.0 프레임 워크 책 장에서 12.
다른 프로젝트 (즉, 사이트의 일부 모바일 애플리케이션이 있고 동일한 비즈니스 로직을 사용해야 함).
그러나 그는 2 개의 장소에서 동일한 메시지 중 일부를 쓰고 있고 이제는 2 개 장소에서 메시지를 업데이트해야한다는 점이 다소 중복되어 보입니다. 나는 또한 그가 왜 서버 측에서 테스트되고 안전해야하기 때문에 "UI"가 검증을 신뢰하지 않는지 확신 할 수 없다.
그러면 서비스 계층에 모든 것을 포함시키는 것이 더 좋지 않을까요? 또는 유효성 검사를 위해 뷰 모델에 간단한 필수 필드를 유지하는 것이 더 낫습니다.
컨트롤러 수준의 유효성 검사는 실제로 중복되어 (완전히) 바보입니다. – Sapph