유효성을 검사하려는 단일 Date
필드가있는 가장 간단한 모델이 있습니다. 문제는 dd.mm.yyyy
으로 날짜를 입력하고 GET을 통해 제출하면 유효성 검사를 통과하지 못하는 것입니다. POST를 통해 제출하면 모든 것이 정상입니다.MVC3 : GET 요청시 ModelState에 대해 Culture가 설정되지 않았습니까?
명시 적으로 CultureInfo를 프로젝트에 적합한 값으로 설정했습니다. GET ModelState.Values.ToList()[0].Value.Culture
이 InvariantCulture이고 POST의 경우 ru-RU 인 것으로 나타났습니다.
문화가 GET 요청에 설정되지 않은 이유는 무엇입니까? ASP.Net의 적절한 동작입니까? 해결 방법이 있습니까?
그냥 참조 또는 누군가가 확인하고자하는 경우, 여기에 모델의 :
public class TestModel
{
[Required]
[DataType(DataType.Date)]
public DateTime Date { get; set; }
}
뷰 :
@using (Html.BeginForm("Index2", "Home", FormMethod.Get)) @* if that is changed to FormMethod.Post - everything's ok *@
{
@Html.ValidationSummary(true)
@Html.EditorForModel()
<input type="submit" value="Ok" />
}
그리고 핸들러 :
public ActionResult Index2(TestModel model)
{
if (!ModelState.IsValid)
{
return View("Index", model);
}
return Content("Ok");
}
이 동작은 [이 비슷한 질문에] 다소 설명되어 있습니다 (http://stackoverflow.com/questions/6202735/asp-net-mvc-model-binder-parse-decimal-differently-with-get-and-post). -requests). 또한 쿼리 문자열에서 날짜와 시간을 보내는 것은 날짜와 시간이 구성된 문자를 고려할 때 매우 위험합니다. :) – bzlm