0

厳密に型指定されたビューの MVC3 (剃刀) の @Html.DropDownListFor フィールドの値でモデルをバインドできません。

厳密に型指定されたビューに使用されるモデル:

public class MyModel
{
  public string Name{get;set;}
  pulic int Status_ID{get;set;}
}

厳密に型指定されたビュー:

@Html.DropDownListFor(m=> m.Status_ID, new SelectList(Repo.AllStatus, "ID", Name"), new   {@style = "width: 100%;" })

フォームを送信する前に、ID=24 のオプションを選択しました (つまり、値=24 オプションが選択されています)。

コントローラ内

public ActionResult AddMyModel(MyModel myModel)
{

}

デバッグ中にコントローラーで次のことを取得しました: myModel.Name は予期される値ですが、myModel.Status_ID は 0 ではなく 24 です。

どこが間違っていますか??

4

1 に答える 1

2

すべてのステータスが既に設定されているビュー モデルをビューに渡す必要があります。

これがあなたの問題の解決策です。シナリオに合わせて変更してください。何も取り残していないことを願っています。以下のコードは、あなたのモデルがどのように見えるかを私が想定しているものです。

あなたのステータスクラス:

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

     public string Name { get; set; }
}

ビューでは、すべてのステータスのリストを含むビュー モデルを渡す必要があります。

public class YourViewModel
{
     public int StatusId { get; set; }

     public IEnumerable<Status> Statuses { get; set; }
}

あなたのコントローラー:

public class YourController : Controller
{
     private readonly IStatusRepository statusRepository;

     public YourController(IStatusRepository statusRepository)
     {
          this.statusRepository = statusRepository;
     }

     public ActionResult YourAction()
     {
          YourViewModel viewModel = new YourViewModel
          {
               Statuses = statusRepository.FindAll()
          };

          return View(viewModel);
     }
}

そして、ビューは次のようになります。

@model YourProject.ViewModels.Statuses.YourViewModel

@Html.DropDownListFor(
     x => x.StatusId,
     new SelectList(Model.Statuses, "Id", "Name", Model.StatusId),
     "-- Select --"
)
@Html.ValidationMessageFor(x => x.StatusId)

これが正しい方向に役立ち、達成しようとしていることに光を当てることができることを願っています.

于 2013-07-25T07:54:35.657 に答える