绑定DropdownList并在回发后维护

时间:2012-05-10 11:30:54

标签: asp.net-mvc-3 dropdownbox

我正在使用MVC3。我将下拉列表与来自服务的数据绑定在一起。但是在页面回发并且过滤器应用于列表后,下拉列表会在网格中显示过滤器记录值,因为我始终绑定来自服务的列表。

但是,我希望下拉列表始终显示数据库中的所有记录。

2 个答案:

答案 0 :(得分:4)

我不明白你的问题。但是你认为这是一个下拉列表吗?我也不知道你想绑定什么,所以我创建了自己的,但看看我的代码并修改它以适应你的场景。

在您看来:

@model YourProject.ViewModels.YourViewModel

在视图中,下拉列表中有一个银行列表。

您的银行下拉:

<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>

您将返回视图的视图模型:

public class YourViewModel
{
     // Partial class

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

您的创建操作方法:

public ActionResult Create()
{
     YourViewModel viewModel = new YourViewModel
     {
          // Get all the banks from the database
          Banks = bankService.FindAll().Where(x => x.IsActive)
     }

     // Return the view model to the view
     // Always use a view model for your data
     return View(viewModel);
}

[HttpPost]
public ActionResult Create(YourViewModel viewModel)
{
     if (!ModelState.IsValid)
     {
          // If there is an error, rebind the dropdown.
          // The item that was selected will still be there.
          viewModel.Banks = bankService.FindAll().Where(x => x.IsActive);

          return View(viewModel);
     }

     // If you browse the values of viewModel you will see that BankId will have the
     // value (unique identifier of bank) already set.  Now that you have this value
     // you can do with it whatever you like.
}

您的银行班:

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

这很简单。我希望这会有所帮助:)

PS:请记住以后的帖子,请尽可能详细地提供详细信息,以便我们更好地为您提供帮助。另外,不要忘记显示代码示例,以便我们可以看到您已经完成的操作。我们可以做得越多越好。

答案 1 :(得分:0)

当您将模型发布回创建[Http Post]操作时,无法将绑定的银行下拉列表值列表绑定回模型。我看到如果模型无效,则调用代码

viewModel.Banks = bankService.FindAll().Where(x => x.IsActive);

再次获取所有银行的列表,我认为您需要再次访问数据库。

由于