1

내보기에서 아약스 호출을 할 때 모델 바인딩을 유지하고 싶습니다. 나는 통화를 할 수 jquery ajax를 사용하고, 그리고 단지 예 - 이것은 내가 아약스에서 호출 할 내 컨트롤러 방법입니다 : 당신이 볼 수 있듯이,이 방법은 Model Binding에 의존복잡한 유형이 관련 될 때 Ajax 및 모델 바인딩을 어떻게 다루는가?

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

. 이것은 메소드를 훨씬 깔끔하게 만듭니다 ... 그러나 이것은 아약스가 호출 할 때 DB에 nullable이 아닌 모든 변수를 제공해야한다는 것을 의미합니다. 내가 가지고있는 경우

그래서, 테이블 변수가 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에 지정된대로) null 일 수 있습니다. 즉, ajax 호출은 string firstName, string lastName, Pet myPet을 제공해야합니다. 그러나 자바 스크립트는 (내가 아는)

그래서 난 단지 두 가지 옵션이 있습니다 ... 애완 동물을 제공 할 수 없습니다

  1. 는 "아첨을 만들기 myPet가 DB에 null이 될 수 있도록 허용 즉, 애완 동물 개체를 필요로하지 않는 사람을 대표하는 "클래스 ...

:

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

첫 번째 옵션에 대한 문제는

... 그것이 안 일을 수 있기 때문에 그것에 대해 잘못 DB ... 확실히 뭔가를 수정해야하는 이상한 보인다 두 번째의 문제입니다 옵션은 내가 많은 수업을 가지고 있으며, 이것을 피하기 위해 각각을위한 중복 클래스를 작성하는 것만 큼 ... 30 클래스가 있다면 그것은 허용하기 위해서 만들어야 할 30 개의 중복 클래스가 될 것입니다. 모델 바인딩.

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

답변

2

실제 트릭은보기 모델 클래스를 실제 모델 클래스와 분리하는 것입니다. 뷰 모델 클래스는 조금 더 단순한 경향이 있으며 실제 모델 클래스로 다시 매핑해야합니다. AutoMapper와 같은 도구를 사용하면이 기능을 훨씬 쉽게 사용할 수 있습니다.

+0

"보기 모델 클래스를 실제 모델 클래스와 분리하십시오"그래서 각 클래스의 복제본을 단순화해야한다고 말하고 있습니까? – Matt

+0

그래, 양식 안팎으로의 매핑을위한 클래스를 어리 석다. –

관련 문제