2011-01-28 5 views
11

Dropdownlist를 작성하려고하지만 Html.DropDownList 렌더링과의 대결을 시도하고 있습니다.드롭 다운 목록 및 SelectListItem 지원을 사용하는 Asp.Net MVC

public class AccountTransactionView 
{ 
    public IEnumerable<SelectListItem> Accounts { get; set; } 
    public int SelectedAccountId { get; set; } 
} 

지금은 기본적으로 내보기 모델 :

나는 클래스가 있습니다. 계정 목록 및 선택한 항목을 반환하기위한 속성 내 컨트롤러에서

,이 같은 데이터가 준비 :

public ActionResult AccountTransaction(AccountTransactionView model) 
{ 
    List<AccountDto> accounts = Services.AccountServices.GetAccounts(false); 

    AccountTransactionView v = new AccountTransactionView 
    { 
     Accounts = (from a in accounts 
        select new SelectListItem 
        { 
         Text = a.Description, 
         Value = a.AccountId.ToString(), 
         Selected = false 
        }), 
    }; 

    return View(model); 
} 

이제 문제 :

<%=Html.DropDownList("SelectedAccountId", Model.Accounts) %> 
: 다음 내보기에 드롭 다운을 구축을 위해 노력하고

다음 오류가 발생합니다.

키가 'SelectedAc'인 ViewData 항목 countId '는'System.Int32 '유형이지만'IEnumerable '유형이어야합니다.

왜 전체 품목 목록을 반환하겠습니까? 나는 단지 선택된 가치를 원한다. 어떻게해야합니까? 또한 내가 두 번째 인수에 대한 SelectList을 사용하는 것을 알 수

<%= Html.DropDownListFor(
    x => x.SelectedAccountId, 
    new SelectList(Model.Accounts, "Value", "Text") 
) %> 

:

답변

23

당신은보기 모델보기가 강력하게 형식화되는 => 사용 강력한 형식의 조력자가있다.

컨트롤러 동작에서 Accounts 속성이 올바르게 설정되어있는 액션 내부에서 생성 한 뷰 모델이 아닌 인수로 전달 된 뷰 모델을 반환했습니다. 따라서 문제가 될 수 있습니다. 나는 조금 청소했습니다

public ActionResult AccountTransaction() 
{ 
    var accounts = Services.AccountServices.GetAccounts(false); 
    var viewModel = new AccountTransactionView 
    { 
     Accounts = accounts.Select(a => new SelectListItem 
     { 
      Text = a.Description, 
      Value = a.AccountId.ToString() 
     }) 
    }; 
    return View(viewModel); 
} 
+0

감사합니다. @Darin Dimitrov - 그게 효과가 있었지만 시도가 잘못되었습니다. 어쩌면 설명 할 수 있니? – Craig

+0

@cdotlister, 확실하지는 않지만 문제는 컨트롤러 액션에 잘못된 모델을 전달한다는 사실과 관련이있을 수 있습니다. –

+0

감사. 게시 한 직후에이를 발견했습니다. – Craig

13

스텝 1 : 모형 클래스

public class RechargeMobileViewModel 
    { 
     public string CustomerFullName { get; set; } 
     public string TelecomSubscriber { get; set; } 
     public int TotalAmount { get; set; } 
     public string MobileNumber { get; set; } 
     public int Month { get; set; } 
     public List<SelectListItem> getAllDaysList { get; set; } 

     // Define the list which you have to show in Drop down List 
     public List<SelectListItem> getAllWeekDaysList() 
     { 
      List<SelectListItem> myList = new List<SelectListItem>(); 
      var data = new[]{ 
       new SelectListItem{ Value="1",Text="Monday"}, 
       new SelectListItem{ Value="2",Text="Tuesday"}, 
       new SelectListItem{ Value="3",Text="Wednesday"}, 
       new SelectListItem{ Value="4",Text="Thrusday"}, 
       new SelectListItem{ Value="5",Text="Friday"}, 
       new SelectListItem{ Value="6",Text="Saturday"}, 
       new SelectListItem{ Value="7",Text="Sunday"}, 
      }; 
      myList = data.ToList(); 
      return myList; 
     } 
} 

스텝 2 : 컨트롤러 액션에서 드롭을 채우기 위해이 메서드를 호출

namespace MvcVariousApplication.Controllers 
    { 
     public class HomeController : Controller 
     { 
      public ActionResult Index() 
      { 
       RechargeMobileViewModel objModel = new RechargeMobileViewModel(); 
       objModel.getAllDaysList = objModel.getAllWeekDaysList(); 
       return View(objModel); 
      } 
    } 
    } 

단계 -3 :보기 드롭 다운 목록을 다음과 같이 채우십시오.

@model MvcVariousApplication.Models.RechargeMobileViewModel 
    @{ 
     ViewBag.Title = "Contact"; 
    } 
    @Html.LabelFor(model=> model.CustomerFullName) 
    @Html.TextBoxFor(model => model.CustomerFullName) 

    @Html.LabelFor(model => model.MobileNumber) 
    @Html.TextBoxFor(model => model.MobileNumber) 

    @Html.LabelFor(model => model.TelecomSubscriber) 
    @Html.TextBoxFor(model => model.TelecomSubscriber) 

    @Html.LabelFor(model => model.TotalAmount) 
    @Html.TextBoxFor(model => model.TotalAmount) 

    @Html.LabelFor(model => model.Month) 
    @Html.DropDownListFor(model => model.Month, new SelectList(Model.getAllDaysList, "Value", "Text"), "-Select Day-") 
관련 문제