문제

내 견해에서 Ajax 호출을 할 때 모델 바인딩을 유지하고 싶습니다. 사용 중입니다 jQuery ajax 전화를 걸기 위해, 예를 들어, 이것은 ajax에서 호출하고 싶은 컨트롤러 방법입니다.

public ActionResult Create(Person personToCreate) {
    //Create person here
}

보시다시피,이 방법은 모델 바인딩. 그러나이 방법을 훨씬 더 깨끗하게 만듭니다. 그러나 AJAX가 호출 할 때 DB에서는 불가능한 모든 변수를 제공해야 함을 의미합니다.

따라서 테이블이있는 경우 Person 변수가 있습니다.

firstName varchar(25) not-null
lastName  varchar(25) not-null
myPet     int         not-null <-- This is a foreign key

그런 다음 엔티티 프레임 워크 클래스, Person, 생성 된 것은 다음과 유사합니다.

public class Person {
   public string firstName { get; set; }
   public string lastName { get; set; }
   public Pet myPet { get; set; }
}

변수 중 어느 것도 DB에 지정된대로 널가 될 수 없기 때문에 Ajax 호출이 string firstName, string lastName, Pet myPet. 그러나 JavaScript는 애완 동물을 공급할 수 없습니다 ...

그래서 나는 두 가지 옵션 만 있습니다 (내가 알고있는).

  1. DB에서 MyPet이 Null을 허용하십시오

  2. 애완 동물 대상을 요구하지 않는 사람을 나타내는 "더 평평한"클래스를 만듭니다 ...

즉:

public class SimplePerson {
    public string firstName { get; set; }
    public string lastName { get; set; }
    public string myPetName { get; set; }
}

첫 번째 옵션의 문제점은 DB를 수정 해야하는 것이 이상하게 보인다는 것입니다.

두 번째 옵션의 문제점은 수업이 많고이 수업을 피하기 위해 중복 수업을 작성하는 것이 광범위 해 보인다는 것입니다. 모델 바인딩을 허용하기 위해 작성하십시오.

누구든지 더 나은 옵션을 생각하거나 한 옵션이 다른 옵션보다 더 나은 이유에 대해 추론 할 수 있습니까?

도움이 되었습니까?

해결책

여기서 진짜 요령은 뷰 모델 클래스를 실제 모델 클래스와 분리하는 것입니다. 보기 모델 클래스는 조금 더 간단한 경향이 있으며 실제 작업을 수행하기 전에 실제 모델 클래스에 다시 매핑해야합니다. automapperp와 같은 도구는 이것을 거의 스냅합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top