2011-06-12 4 views
6

나는 Vat와 Product의 두 클래스가 있습니다. 제품에는 IVat 속성이 있습니다. 제품을 만들거나 편집 할 때 MVC의 편집기 템플릿을 사용하여 모든 Vat 객체의 드롭 다운 목록을 표시하려고합니다. 친애하는 삶을 위해서 나는이 일을 할 수 없다.복잡한 유형의 MVC3에서 editortemplates를 어떻게 사용합니까?

다음 코드는 드롭 다운을 표시하지만 양식을 제출할 때 Vat를 설정하지 않습니다.

컨트롤러 :

IList<IVatRate> vatRates = SqlDataRepository.VatRates.Data.GetAllResults(); 
ViewBag.VatRates = new SelectList(vatRates, "Id", "Description"); 

Add.cshtml

@Html.EditorFor(model => model.VatRate.Id, "VatSelector", (SelectList)ViewBag.VatRates) 

VatSelector.cshtml

@model SelectList 
@Html.DropDownList(
     String.Empty /* */, 
      (SelectList)ViewBag.Suppliers, 
     Model 
    ) 

사람이 되거 또는 날 지점 수 있다면 나는 감사 드리겠습니다 어딘가에있는 웹상의 좋은 예가 ... 나는 지금 며칠 동안 이걸 붙잡아왔다.

답변

7

ViewBag보다 훨씬 쉽게 작업을 수행 할 수 있도록 강력하게 형식화 된보기 및보기 모델을 사용합니다.

그래서보기 모델을 시작합니다

public class VatRateViewModel 
{ 
    public string SelectedVatRateId { get; set; } 
    public IEnumerable<IVatRate> Rates { get; set; } 
} 

다음 컨트롤러 :

보기
public class HomeController: Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new VatRateViewModel 
     { 
      Rates = SqlDataRepository.VatRates.Data.GetAllResults() 
     }; 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(VatRateViewModel model) 
    { 
     // model.SelectedVatRateId will contain the selected vat rate id 
     ... 
    } 
} 

:

@model VatRateViewModel 
@using (Html.BeginForm()) 
{ 
    @Html.DropDownListFor(
     x => x.SelectedVatRateId, 
     new SelectList(Model.Rates, "Id", "Description") 
    ) 
    <input type="submit" value="OK" /> 
} 

그리고 당신이 VatRateViewModel 당신을 위해 편집기 템플릿을 사용하고자하는 경우 ~/Views/Shared/EditorTemplates/VatRateViewModel.cshtml에 정의 할 수 있습니다.

@model VatRateViewModel 
@Html.DropDownListFor(
    x => x.SelectedVatRateId, 
    new SelectList(Model.Rates, "Id", "Description") 
) 

당신은 유형의 속성을 가질 때마다 어딘가에 다음 VatRateViewModel 당신은 단순히 수 : 해당 편집기 템플릿을 렌더링 할

@Html.EditorFor(x => x.SomePropertyOfTypeVatRateViewModel) 

.

+0

답변 해 주셔서 감사합니다. editortemplate에 별도의 컨트롤러가 있습니까? 그렇지 않은 경우 내 제품의 가치는 어떻게 설정 될까요? 그렇다면 어디로 가고 무엇을 불러야합니까? 나는 전에 이것을 시도했으나 작동시키지 못했습니다. – Pieter

+0

좋아, 많이 피, 땀과 눈물 나는 나중에 그것을 분류있어. 내 모든 복잡한 유형을 ViewModel과 내 제품에 추가해야했습니다. 다시 한 번 감사드립니다! – Pieter