2010-01-27 2 views
0

가장 간단한 경우, 작업 목록에 대해 "보기 만들기"를 만들고 사용자가 관련 테이블에서 "범주"를 선택하도록 허용하려고합니다. 드롭 다운리스트.ASP.NET MVC "생성"보기 생성에 관한 질문

나는

  1. 는 작업과는 IEnumerable을 포함하는 사용자 정의 모델을 작성해야 하는가?
  2. "작업보기 만들기"에서 CategoryController를 인스턴스화하고 CategoryController의 메서드를 통해 DDL을 바인딩합니까?
  3. 내가 생각하지 않은 또 다른 옵션은 무엇입니까?

MVC 디자인 패턴에 가장 잘 어울리는 접근법은 무엇입니까? 어느 것이 더 중요하게 사용합니까?

답변

0

1이 가장 정확한 방법입니다.

2가 완전히 악의적인데, 웹 양식 세계에서 여러분의 등을 맞댄 그리고 관심사의 청결한 분리를 멀리 던지십시오. 가) 빠른 해킹을

public ActionResult Create() { 
ViewData["myList"] = new SelectList(listOfCategories, "Name","CategoryId"); 
return View() 
} 

Create.aspx 
... 
<%= Html.DropDown("categoryId", ViewData["myList"] as SelectList,"-"); 
... 

B를 :

3 불필요 나는 당신이 두 가지 일을 할 수있는 대신 1

2

의 얻을 것 얼마나 모르기 때문에) ViewDataModel을 만듭니다. 이 어수선하지 않고, 컨트롤러에서 코드을 많이 이동하고 "이 페이지를 표시하기 위해 필요한 것은"-code에 있기 때문에

public class CreateProductViewData 
{ 
    public Product product { get; private set; }; 
    public SelectList Categories { get; private set; } 

    public CreateProductViewData(Product p) { 
      product = p; 
      Categories = new SelectList(listOfCategories, "Name","CategoryId"); 
    } 

} 

public ActionResult Create() 
{ 
    Product p = new Product() { name="New Product..." } ; 
    return View(new CreateProductViewData(p)); 
} 


in Create.aspx 
    ...Inherits="System.Web.Mvc.ViewPage<CreateProductViewData>" %> 

    .. 
    .. 
    <%= Html.DropDown("CategoryId", Model.Categories, "-"); 

나는 주로 "어떻게 데이터를 표시 할"접근 B를 사용 암호.

그래서 사실상 I는 (행위

  • 코드 (컨트롤러) 보조 데이터를 뷰를 렌더링 (을 ViewData 개체)
  • 코드를 로딩하여 뷰를 준비
  • 코드가 .aspx)

일반적으로 ViewDataModel을 편집 및 만들기 모두에 다시 사용할 수 있습니다.