ListBox不填充所选项目

时间:2012-11-24 23:40:27

标签: asp.net-mvc-3 entity-framework-4

我已经看过这个问题了几次,我跟着this我自己尝试使用MS音乐商店演示后无效,但我仍然无法得到这个工作。我还注意到,当我在viewmodel中查看我的MultiSelectList对象时,它在所选项属性中具有正确的项,但是如果我展开结果视图,则它没有任何具有所选值的listboxitem。我在这里错过了什么?我觉得我正在服用疯狂的药!提前致谢。

模型:

public class Article

    {
        public int ArticleID { get; set; }
        public DateTime? DatePurchased { get; set; }
        public DateTime? LastWorn { get; set; }
        public string ThumbnailImg { get; set; }
        public string LargeImg { get; set; }


        public virtual List<Outfit> Outfits { get; set; }
        public virtual List<Tag> Tags { get; set; }
    }

视图模型:

public class ArticleViewModel
{
    public int ArticleID { get; set; }
    public List<Tag> Tags { get; set; }
    public MultiSelectList mslTags { get; set; }
    public virtual Article Article { get; set; }

    public ArticleViewModel(int ArticleID)
    {
        using (ctContext db = new ctContext())
        {
            this.Article = db.Articles.Find(ArticleID);
            this.Tags = db.Tags.ToList();
            this.mslTags = new MultiSelectList(this.Tags, "TagID", "Name", this.Article.Tags);

        }
    }

}

控制器:

 public ActionResult Index()
    {
        ArticleIndexViewModel vm = new ArticleIndexViewModel(db);

        return View(vm);
    }

视图:

    @model ClosetTracker.ArticleViewModel
        @using (Html.BeginForm())
        {

            <img id="bigImg" src="@Model.Article.ThumbnailImg" alt="img" />
            @Html.HiddenFor(m => m.ArticleID);

            @Html.LabelFor(m => m.Article.Tags)
 @*   @Html.ListBoxFor(m => m.Article.Tags, Model.Tags.Select(t => new SelectListItem { Text = t.Name, Value = t.TagID.ToString() }), new { Multiple = "multiple" })
*@  
   @Html.ListBoxFor(m => m.Article.Tags, Model.mslTags);

            @Html.LabelFor(m => m.Article.LastWorn)    
            @Html.TextBoxFor(m => m.Article.LastWorn, new { @class = "datepicker" })
            @Html.LabelFor(m => m.Article.DatePurchased)            
            @Html.TextBoxFor(m => m.Article.DatePurchased, new { @class = "datepicker" })

            <p>
                <input type="submit" value="Save" />
            </p>
        }

EDITED

好的,我改变了MultiSelectList的构造函数,在选定的值arg中有一个TagID列表,而不是Tag对象列表。当我在调试模式下观察mslTags对象时,这会显示在结果视图中选择的正确标记。但是,它仍然无法正确呈现到页面。

 public class ArticleViewModel
    {
        public int ArticleID { get; set; }
        public List<Tag> Tags { get; set; }
        public MultiSelectList mslTags { get; set; }
        public virtual Article Article { get; set; }

        public ArticleViewModel(int ArticleID)
        {
            using (ctContext db = new ctContext())
            {
                this.Article = db.Articles.Find(ArticleID);
                this.Tags = db.Tags.ToList();
                this.mslTags = new MultiSelectList(this.Tags, "TagID", "Name",  this.Article.Tags.Select(t => t.TagID).ToList());

            }
        }

    }

更新2

我尝试使用listbox helper而不是listboxfor,并且工作正常

@ Html.ListBox(“ArticleTags”,新的MultiSelectList(Model.Tags,“TagID”,“Name”,Model.selectedTagIDs))

0 个答案:

没有答案