2011-12-29 2 views
0

MVC 3 응용 프로그램에 Camera라는 객체가 있습니다. Camera 객체를 편집하기 위해 컨트롤러 액션과 뷰를 만들었습니다. 나는 몇 가지 문제를 보았고 누군가가 나를 도왔다면 고맙겠습니다. 다음은 편집 작업 방법은 다음과 같습니다MVC 3 app의 편집보기에서 자동 생성 필드 제거 및 해당 속성 채우기

public ActionResult CameraEdit(int cid) 
{ 
... 
} 

[HttpPost] 
public ActionResult CameraEdit(Camera camera, HttpPostedFile file) 
{ 
... 
} 

1 카메라 클래스 I (예 : createdDate 등) 편집보기에 표시하지 않으려는 일부 속성이 있습니다. 그래서 레이아웃에서 자동 생성 태그를 제거했습니다. 문제는 TryUpdateModel을 사용하여 HttpPost 버전의 Edit 액션 메서드 (Camera 객체를 첫 번째 매개 변수로 사용함)에서 카메라 객체를 업데이트 할 때 나가는 속성을 채우지 않고 null로 설정하는 경우입니다. 이 문제를 어떻게 해결할 수 있습니까? MVC 프레임 워크는 name 속성을 기반으로 양식 필드를 검색하여 속성을 채우기 위해 최선을 다합니다. 따라서 'createdDate'라는 이름으로 텍스트 상자를 찾지 못하면이 속성을 채우지 못합니다. 그러나 나는이 원치 않는 필드를 어떻게 숨길 것인가? 여기에 모순되는 것들이 있습니다!

2 내 카메라 클래스에는 이미지의 경로를 저장하는 Image 속성이 있습니다. 편집 폼에서 위의 경우와 마찬가지로 파일 업로드를하고 싶습니다. 레이아웃에서 자동 생성 태그를 제거하고 html 파일 입력을 대신했습니다. 런타임에 파일을 업로드하는 경우 Camera 객체의 Image 속성 (Edit 메서드의 첫 번째 속성)을 사용자가 입력 한 새 경로로 설정하는 방법은 무엇입니까?

답변

0

보기 모델을 사용하십시오. 따라서 편집 작업을 통과하고 수행하는 대신 Camera 개체를 통과시켜 EditCameraViewModel 개체를 가져옵니다. 이 클래스는 정의 할 클래스이며 카메라와이 특정 뷰를 편집하는 데 필요한 것만 포함합니다. 업로드 된 파일조차도 뷰 모델의 속성 일 수 있으므로 POST 컨트롤러 액션에는 2 개의 인수가 필요하지 않습니다. 분명히보기는 도메인 모델 대신보기 모델에 강하게 입력됩니다.

컨트롤러 내부에서 동작은 도메인 모델과 뷰 모델을 매핑합니다. 개인적으로이 매핑을 단순화하기 위해 AutoMapper을 사용합니다.

이렇게하면 자동 생성 된 모든 EF를 DAL 레이어에 유지할 수 있으며 프론트 엔드에서 신경 쓸 필요가 없습니다.

+0

ViewModel 메서드가 작동하지만 파일 업로드와 함께 catch가 있습니다. ViewModel 클래스에서 파일 입력에서 가져온 파일 경로가 올바르게 채워지도록 어떤 속성을 고려해야합니까? –

+0

@HamidRashidi, 다음과 같이 :'public HttpPostedFileBase File {get; 세트; }'. 당신이 당신의 질문에 사용했던 구체적인'HttpPostedFile' 클래스가 아니라'HttpPostedFileBase'를 사용하고 있음을 주목하십시오. –