1

データベースから値を取得する selectlistitem に問題があります。

ビューに項目のリストを表示していますが、選択した値をモデルに通過 (POST) していません。

そのため、ユーザーが送信するか、検証のためにページがリロードされると、選択値 (PositionApplied) は空になります。

どこが間違っているのか、誰かが私にいくつかの指針を与えることができますか?

私のコントローラーで:

    [HttpGet]
    public ActionResult Index()
    {
        PopulateJobsDropdown();
        return View();
    }

    private void PopulateJobsDropdown()
    {
        IEnumerable<SelectListItem> items = _service.GetJobs()
            .Select(c => new SelectListItem
                             {
                                 Value = c.JobID.ToString(),
                                 Text = c.JobTitle
                             });
        ViewData["PositionApplied"] = items;
    }

私のViewModelでは

 public IEnumerable<SelectListItem> PositionApplied { get; set; }

私からしてみれば

<%=Html.DropDownList("PositionApplied")%>

ご指摘ありがとうございます。

4

1 に答える 1

1

それで、取得するコード行はどこにありますか

ViewData["PositionApplied"] = items;

の中へ

public IEnumerable<SelectListItem> PositionApplied { get; set; }

何かのようなもの:

this.PositionApplied = ViewData["PositionApplied"] as IEnumerable<SelectListItem>;

ビューで簡単に使用できます:

<%
    IEnumerable<SelectListItem> PositionApplied = 
          ViewData["PositionApplied"] as IEnumerable<SelectListItem>;
%>

...

<%= Html.DropDownList("myDropDOwnId", PositionApplied) %>

または、私が気付いていないMVC2の下で自動魔法のようなことが起こっていますか? 私があなたに与える例を常に使用しているように。


追加した

Linq to Entities エラーを回避するために (使用している場合)、メソッドを次のように変更します。

private void PopulateJobsDropdown()
{
    IQueryble<Your_Table> jobs = _service.GetJobs();
    List<SelectListItem> items = new List<SelectListItem>();
    foreach(var job in jobs)
        items.add(new SelectListItem
                      {
                         Value = c.JobID.ToString(),
                         Text = c.JobTitle
                      });
    ViewData["PositionApplied"] = items;
}

そして、すべてうまくいきます。

于 2011-02-16T10:59:34.287 に答える