여러 ViewModels로보기의 유효성 검사에 문제가 있습니다. 제 상황은 하나의 기본 양식이 있는데, 이는 많은 페이지에서 동일합니다. ID 매개 변수를 사용하여이 기본 양식에 새 외부 필드를 렌더링합니다. 이러한 외부 필드는 자체 ViewModel과 자체 Controller를 사용하는 ActionResult 유형입니다. 주 작업 컨트롤러에서 ModelState.IsValid 경우 제어 할 수 있지만 문제가 - 모든 외부 필드의 모든 ViewModels 유효성을 검사하지만 활성 외부 필드 및 기본 폼 너무 ViewModel 만 유효성을 검사 할 너무 싶습니다.ModelState.IsValid를 사용하여 단일 뷰에서 여러 ViewModels의 유효성을 검사하는 방법
그것은 다음과 같습니다
의 ViewModel을 내가 필요하면 내가 (AllFieldsVm
의 새로운 인스턴스를 생성하고이에 ExternalFieldXyVm
의 새 인스턴스를 만들
public class AllFieldsVm
{
public BasicFormVm BasicFormVm { get; set; }
public ExternalFieldXyVm ExternalFieldXyVm { get; set; }
public AnotherExternalFieldVm AnotherExternalFieldVm { get; set; }
}
모든 뷰 모델로, I 이 필드를 미리 채 웁니다). 이것은 일부 조건이 참일 때 부분 뷰 (@{Html.RenderAction("Action", "Controller", new {@someOptionalData = value});}
사용)와 같은 화이트 아웃 레이아웃을 렌더링합니다.
나는 이런 식으로 뭔가를하고 난이 코드 if (ModelState.IsValid(model.BasicFormVm) && ModelState.IsValid(model.ExternalFieldXyVm))
같은 것을 사용하려면 :
[POST("someurl-id{someId}")]
public ActionResult SaveFormData(int someId, AllFieldsVm model)
{
//Here I want something like
//if (ModelState.IsValid(model.BasicFormVm) && ModelState.IsValid(model.ExternalFieldXyVm)) or something like that...
var se = new SomeEntity();
se.property1 = model.property1;
se.property2 = model.property2;
using (var dbc = _db.Database.BeginTransaction())
{
try
{
_db.Add(se);
_db.SaveChanges();
//My Condition - when save external data
if (someId == (int) MovementTypes.SomeEnumInt)
{
var rd = new ExternalFieldEntity
{
PropertyA = se.property0,
PropertyB = Convert.ToDateTime(model.ExternalFieldXyVm.SomeExternalFieldName)
};
_db.Add(rd);
_db.SaveChanges();
}
dbc.Commit();
}
catch (Exception)
{
dbc.Rollback();
}
}
return RedirectToAction("Action", "Controller");
}
그래서, 내 질문은, 어떻게 ExternalFieldXyVm 유효성을 검사 할 수 있습니다 separatly 기반 어떤 조건에?
기본 DataAnnotations 또는 FluentValidation을 사용하지 않고 모든 자체 유효성 검사기를 만들어야합니까? 이런 형식의 경험이 없으니 잠시 기다려주십시오 ...
모두에게 감사드립니다 !!
가능한 복제 http://stackoverflow.com/questions/1135320/validation-on-viewmodels-in-asp-net-mvc –
Simranjeet : 아니요, 그렇지 않습니다. 복제. 나는 viewmodel에서 원하는 속성을 검증하는 방법을 안다. 하나의 ViewModel이 컨트롤러에서 유효성을 검사 할 컨트롤을 원합니다. 이 욕망은 어떤 상태의 결과에 근거해야합니다. 만약 내가 ModelState.IsValid 페이지의 여러 Vms의 구체적인 Vm (및 컨트롤러의 한 POST 동작에서) ModelState.IsValid를 사용할 수 있는지, 또는 알지 못한다면 어떻게해야합니까? – goldJ
ModelState.IsValid wouldn ' 도와 줘. 그것은 특정 것이 아닌 모든 것을 검증 할 것입니다. –