1

編集フォーム付きのMVC3Webサイトがあります。このフォームには、選択可能な値のリストを表示するDropDownListがあります。以前に選択した値(フォームの作成時)に設定したい。この値はModel.Statusにあります。私はこのコードがうまくいくと思いました:

 @Html.DropDownList("Status",
           new SelectList(ViewBag.Status as System.Collections.IEnumerable, "Id", "Status", Model.Status))

ただし、DropDownListは常にリストの最初の値に設定されます。確認しました-正しい値はにありModel.Statusます。の値Model.Statusは、リストからのステータスのIDです。ViewBag.StatusIDと文字列の説明を含むリストです-ステータス。

正しい値を表示させる方法は?どんな助けでも大歓迎です!

4

3 に答える 3

3

このバグをチェックしましたか

DropDownListとの同じ名前を使用しないでくださいSelectList

于 2012-05-11T10:47:16.963 に答える
1
@Html.DropDownListFor(x=>x.SelectedItemId,
                     new SelectList(ViewBag.Status as System.Collections.IEnumerable,"Id",
                     "Status"),"Select Item")

しかし、私がこのコードを書いている場合、私はそれを取り除き、ViewBagそれを別の厳密に型指定されたオブジェクトを使用するように変更します

public class YourMainViewModel
{
  public int ID { set;get;}

  public int SelectedItemId { set;get;}
  public IEnumerable<Item> Items();
  //other properties
}

public class Item
{
  public int Id { set;get;}
  public string Status { set;get;}
}

でコレクションを送信する代わりにViewbag、新しいモデル プロパティを使用します。

public ActionResult EditUser(int id)
{
  var user=myRepositary.GetUser(id);
  user.Items=myRepositary.GetAllItems();
  user.SelectedItemId=5; // replace with the value from your database here,
}

に強く型付けされた私のビューでYourMainViewModel、これを書きます

@Html.DropDownListFor(x=>x.SelectedItemId,
                     new SelectList(Model.Items,"Id",
                     "Status"),"Select Item")
于 2012-05-11T11:06:21.917 に答える
0

シナリオで変更して使用できるサンプル コードを次に示します。私は編集ビューを持っています。このビューでは、ドロップダウンに銀行のリストがあり、このアプリケーションに関連付けられている銀行はリストで事前に選択されています。

私の見解:

@model MyProject.ViewModels.MyViewModel

私の銀行のドロップダウン:

<td><b>Bank:</b></td>
<td>
     @Html.DropDownListFor(
          x => x.BankId,
          new SelectList(Model.Banks, "Id", "Name", Model.BankId),
          "-- Select --"
     )
     @Html.ValidationMessageFor(x => x.BankId)
</td>

私のMyViewModel:

public class MyViewModel
{
     // Partial class

     public int BankId { get; set; }
     public IEnumerable<Bank> Banks { get; set; }
}

私の編集アクションメソッド:

public ActionResult Edit(int id)
{
     // Get the required application
     GrantApplication application = grantApplicationService.FindById(id);

     // Mapping
     MyViewModel viewModel = (MyViewModel)
          grantApplicationMapper.Map(
          application,
          typeof(GrantApplication),
          typeof(MyViewModel)
     );

     // BankId comes from my table.  This is the unique identifier for the bank that was selected when the application was added

     // Get all the banks
     viewModel.Banks = bankService.FindAll().Where(x => x.IsActive);

     return View(viewModel);
}

私の銀行クラス:

public class Bank
{
     public int Id { get; set; }
     public string Name { get; set; }
     public bool IsActive { get; set; }
}

このようにすると、フォームが読み込まれた後にドロップダウンに選択された値が表示されます。

これが役立つことを願っています:)

于 2012-05-11T11:30:46.840 に答える