2

州と国を選択する必要がある登録ページがあります。これらのドロップダウンに入力される項目は、外部データベースから取得されます。

ページがレンダリングされる前に、これらのリストを作成する呼び出しを行うにはどうすればよいですか?

public class RegisterModel
{
...
public IEnumerable<SelectListItem> States {get;set;}
public IEnumerable<SelectListItem> Countries {get;set;}
...
}

//Register.cshtml
@model Adw.Web.Models.RegisterModel

@Html.LabelFor(m => m.State)
@Html.DropDownListFor(m =>m.State, new SelectList(Model.States))

//Controller
public ActionResult Register()
    {
        .....
        RegisterModel rm = new RegisterModel();

        //The factories return List<string> 
        rm.States = new SelectList(stateFactory.Create(states.Payload));
        rm.Countries = new SelectList(countryFactory.Create(country.Payload));

        return View(rm);
    }

上記のセットアップで私は受け取ります:

キー「State」を持つ「IEnumerable」タイプの ViewData アイテムはありません。

概要 - ページがレンダリングされる前に、2 つのドロップダウンのデータを取得するために Web サービス呼び出しを行う必要があります。

4

1 に答える 1

2

これを試して

モデル:

public class RegisterModel
{
    ...
    public IList<string> States { get; set; }
    public IList<string> Countries { get; set; }
    ....
}

コントローラ:

RegisterModel rm = new RegisterModel();

// read data from the database and add to the list
rm.States = new List<string> { "NY", "LA" };
rm.Countries = new List<string> { "USA", "Canada" };

景色:

@Html.LabelFor(x=>x.Countries)
@Html.DropDownListFor( x=>x.Countries, new SelectList(Model.Countries))

@Html.LabelFor(x=>x.States)
@Html.DropDownListFor( x=>x.States, new SelectList(Model.States))

これがうまくいくことを願っています。

于 2013-02-21T08:40:46.597 に答える