asp.net-mvc-3 - asp.net mvc 3 Dropdownlist问题,必须是类型 'IEnumerable<SelectListItem>'?

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

当我点击保存时出现以下错误:

具有“SelectedCategoryId”键的 ViewData 项的类型为“System.Int32”,但必须为“IEnumerable”类型?

我的 Controller :

public ActionResult IndexTwee()
    {

        var listCategories = new List<SelectListItem>();

        listCategories.Add(new SelectListItem() {Text="foo",Value="1" });
        listCategories.Add(new SelectListItem() { Text = "bar", Value = "2" });

        MyViewModelTwee model = new MyViewModelTwee() { };

        model.Categories = listCategories;
        model.SelectedCategoryId = 2;

        return View(model);
    }


    [HttpPost]
    public ActionResult IndexTwee(MyViewModelTwee Model)
    {

        return View(Model);

    }

我的模型:

  public class MyViewModelTwee
{
    public int SelectedCategoryId { get; set; }
    public IEnumerable<SelectListItem> Categories { get; set; }
}

我的观点:

@model mvc3DropDown.Models.MyViewModelTwee
@using (Html.BeginForm())
{
    @Html.DropDownListFor(
    x => x.SelectedCategoryId,
    Model.Categories
)
    <button>Save</button>

}

最佳答案

不要忘记在 POST 操作中重新绑定(bind)列表:

[HttpPost]
public ActionResult Index(MyViewModelTwee Model)
{
    var listCategories = new List<SelectListItem>();
    listCategories.Add(new SelectListItem() { Text = "foo", Value = "1" });
    listCategories.Add(new SelectListItem() { Text = "bar", Value = "2" });
    Model.Categories = listCategories;
    return View(Model);
}

请记住,当您提交 html <form> 时,仅发送所选值。其他值会丢失,因此您需要从 GET 操作中获取它们的位置重新获取它们。当然,您将将此代码外部化到存储库层中,以便您的代码现在如下所示:

public ActionResult IndexTwee()
{
    var model = new MyViewModelTwee
    {
        SelectedCategoryId = 2,
        Categories = _repository.GetCategories()
    };
    return View(model);
}

[HttpPost]
public ActionResult IndexTwee(MyViewModelTwee Model)
{
    Model.Categories = _repository.GetCategories();
    return View(Model);
}

关于asp.net-mvc-3 - asp.net mvc 3 Dropdownlist问题,必须是类型 'IEnumerable<SelectListItem>'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7461128/

相关文章:

asp.net-mvc-3 - 未填充 Razor 自定义 View 库属性

.net - 在JToken上进行Is操作编译

c#-4.0 - Azure 缓存对象的类型转换始终为 null

.net - Nhibernate更新问题-参数索引超出范围

c# - 在 ASP.NET MVC 3 中,如何使用 LINQ 只检索我想要的实体对象?

asp.net-mvc - MVC ASP.NET 或 Razor

asp.net-mvc - 在MVC View 上显示图像

css - Html.ActionLink 访问过

c# - 为什么 C# 4.0 中的类没有泛型变化?

nhibernate - 延迟初始化失败 - 没有 session 或 session 已关闭