在使用自动绑定的情况下,无法获得@ Html.DropDownListFor的新选定值

时间:2013-07-25 05:11:53

标签: c# asp.net asp.net-mvc asp.net-mvc-3

无法使用来自强类型视图的MVC3(razor)中的@ 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

我哪里错了?

1 个答案:

答案 0 :(得分: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)

我希望这可以帮助你朝着正确的方向前进,并阐明你想要实现的目标。