2011-11-29 2 views
2

ASP.NET MVC에서 자신 만의 스택 오버 플로우를 개발한다고 가정 해 봅시다 .-ASP.NET MVC - 입력 된 뷰의 모델의 절반 만 게시 하시겠습니까?

질문에 대답 할 수있는 기능이 있습니다. 따라서보기에는 원본 질문 세부 사항 (제목, 텍스트 등)이 포함되어야하며 답변을 제출할 양식도 포함되어야합니다. 보기를 렌더링하려면 원래 질문 객체와 새 빈 응답 객체를 모두 제공해야합니다. 그런 다음 답변 만 게시 할 수 있습니다.

이보기의 유형을 어떻게 정의 하시겠습니까? 질문과 빈 응답을 모두 포함하는이 뷰에 특정한 뷰 모델을 구현 하시겠습니까? 여기에 일반적인 접근 방식은 무엇입니까? 내가 가진

아이디어는 다음과 같습니다

  1. 질문과 답변을 모두 포함하는 특수한 뷰 모델 객체를 사용. View는이 객체에 바인드됩니다. 보기를 렌더링 할 때 질문 세부 사항이 사용됩니다. 다시 게시 할 때 컨트롤러에있는 객체에만 응답 관련 필드가 채워집니다.

  2. 질문 개체를 전달하는 데 ViewBag을 사용합니다. 보기는 응답 모델에 바인딩됩니다.

  3. ?

(NO AJAX 제발, 그냥 아주 기본적인 시나리오)

답변

1

귀하의 질문은 많은 이해가되지 않습니다. 입력, 버튼 값 등과 같이 양식 컨트롤 만 게시되기 때문에 귀하의 질문은 다시 게시되지 않습니다. 귀하의 질문은 HTML 텍스트이며 게시되지 않습니다.

+0

그래서 대답은 무엇입니까? 그것은 질문과 답변 모두를 포함하고있는 특별한 모델 뷰 객체입니까? – agibalov

+0

언급 할 수있는 시나리오 중 하나를 수행 할 수 있습니다. 모든 동적 데이터를 뷰 모델에 두는 것을 선호합니다. 개인적인 취향입니다. –

1

질문을 답장하고 모든 답변을 모델로 페이지에 보냅니다. 맨 아래에는 주어진 질문 ID를 사용하여 AnswerModel을 제출하는 양식이 필요합니다.

보기를 렌더링 할 때 전달되는 기본 AnswerModel을 만들지 만, 모델에 대한 질문 및 답변 '개체'는 사용하지 않거나 걱정할 필요가 없습니다. 질문과 현재 답변 목록이 포함 된 ThreadViewModel을 만들 수 있습니다. 그럼 난 4 개 클래스

public QuestionDetail : IQuestionDetail 
{ //implemented } 

public AnswerDetail : IAnswerDetail 
{ //implemented } 

public QuestionViewModel : IQuestionView, IAnswerView 
{ //implemented } 

public AnswerModel : IAnswerView 
{ //implemented } 

단일 뷰 (질문/Detail.cs)

@model Models.QuestionViewModel 

@html.Partial("partial-questionDetails", Model) 

@html.Partial("partial-answerDetails", Model) 

두 부분을 도출

public IQuestionDetail 
{ 
    string QuestionText { get; } 
    // Question Details 
} 
public IQuestionView 
{ 
    IQuestionDetail QuestionDetail { get; } 
} 
public IAnswerDetail 
{ 
    int/guid QuestionID { get; } 
    string AnwerText { get; } 
    // Anwer Details 
} 
public IAnswerView 
{ 
    IAnswerDetail AnswerDetail { get; } 
} 

:

1

내가 뭘하는 네 개의 인터페이스를 만드는 것입니다 조회수

//partial-questionDetails.cshtml 
@model Models.IQuestionView 

@Html.DisplayFor(Model.QuestionDetail) 

//partial-answerDetails.cshtml 
@model Models.IAnswerView 

@Html.BeginForm() 
{ 
    Html.EditorFor(Model.AnswerDetail) 
} 

평소 제출 데이터를 수신하기 위해 두 개의 클래스, 뷰 (뷰 모델)을 채우기위한 하나 그리고 다른 생성

public ActionResult Detail(IAnswerView AnswerModel) 
{ 
    // AnswerModel is only populated with the Answer Fields 
    // Do Stuff with AnswerModel 

    QuestionViewModel viewModel = new QuestionViewModel() 
    View(viewModel); 
} 
+0

매우 흥미로운 생각이지만 접근 방법이 많은 클래스/인터페이스가 마음에 들지 않더라도 :-) – agibalov

+0

쉽게 간단하게 만들 수 있지만 확장 성 인터페이스가 제공하는 것을 좋아합니다. –

0

ASP.NET MVC 형태의 건물 QuestionController. ViewModel (일반적으로 읽기 전용)은보기를 채우기 위해 필요한 추가 정보를 포함 할 수 있지만 데이터 객체는 양식을 제출하기위한 속성 (공개 설정자 포함) 만 가지고 있습니다.

이러한 클래스는 ASP.NET MVC의 모델 바인딩이 제대로 연결되도록 여러 속성을 공통으로 갖습니다. 간단한 양식의 경우 각보기에 대해 별도의 인터페이스를 추출하지는 않지만 특성이 일치하도록하려면 인터페이스를 사용하면 쉽게 인터페이스를 수행 할 수 있습니다.

이렇게하려면 폼 필드를 나타내는 속성을 가진 단일 인터페이스를 만듭니다. 그런 다음 각 클래스가 인터페이스를 구현하게하여 양식 필드가 두 클래스에 모두 있다는 컴파일 타임 보장을 제공합니다.

관련 문제