【问题标题】:ListBoxFor not binding my viewmodelListBoxFor 没有绑​​定我的视图模型
【发布时间】:2011-12-19 10:53:53
【问题描述】:

我知道这个问题已经被问到了很多关于 SO 的问题。

herehere

但我仍然无法找出问题所在。

我正在开发一个博客来自学 MVC 框架。现在,当我发布下面的视图时,ListBoxFor 助手不会将任何值绑定到我的模型。该列表成功包含所有类别,但是当 POST 控制器返回视图模型时,类别对象为空。

这是视图模型:

public class PostViewModel
{
    public Post Posts { get; set; }
    public IEnumerable<Category> Categories { get; set; }
}

控制器:

    public ActionResult Create()
    {
        PostViewModel post = new PostViewModel();
        post.Categories = db.ListCategories();
        return View(post);
    }

观点:

<p>@Html.ListBoxFor(model => model.Categories, new MultiSelectList(Model.Categories, "CategoryID", "CategoryName"))</p>

【问题讨论】:

  • 您是在 POST 操作中获得空值,还是在 POST 操作后尝试呈现相同的视图?

标签: asp.net .net asp.net-mvc asp.net-mvc-3 razor


【解决方案1】:

我相信您的视图模型中应该有一个数组属性,所选 ID 将绑定到该属性。

public class PostViewModel
{
    public Post Posts { get; set; }
    public int[] SelectedCategoryIds { get; set; }
    public IEnumerable<Category> Categories { get; set; }
}

并将您的 Html.ListBoxFor 调用更改为 SelectedCategoryIds 属性。

<p>@Html.ListBoxFor(model => model.SelectedCategoryIds, new MultiSelectList(Model.Categories, "CategoryID", "CategoryName"))</p>

顺便说一句:现在您正在为SelectedCategoryIds 属性创建一个列表框,如果您有列表的标签,您也应该将其更改为SelectedCategoryIds 属性。

@Html.LabelFor(model => model.SelectedCategoryIds, "Categories")

"Categories"是标签文字)

【讨论】:

  • +1 这确实帮助我了解了一些视图模型概念
  • @fsmmu 您的 PostViewModel 不应包含属于域模型的类别列表。
【解决方案2】:

不是 100% 确定我是否理解您的问题;但是这段代码有帮助吗?它显示了在将表单发回服务器时如何获取选择的类别。

[HttpPost]
public ActionResult Create(Post post, FormCollection formCollection) 
{
  var listOfCategoryIDs = formCollection["categories"];
  var arrayOfCategoryIDs = listOfCategoryIDs.Split(',');
}

【讨论】:

    猜你喜欢
    • 2012-05-14
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2011-03-29
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多