mvc 4 MultiSelect 列表和 EF 多对多

2024-03-11

我有这些实体(它们之间有多对多的联系):

public class Post
{     
    public Guid PostId { get; set; }     
    public string Name { get; set; }       
    public virtual ICollection<Tag> Tags { get; set; }
}

  public class Tag
{
    public int TagId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Post> Posts { get; set; }
}

我希望用户在创建 Post 时从 MultiSelectList 中选择数据,然后 MultiSelectList 将该数据传递给 Post.Tags。我怎样才能做到这一点 ?


我有类似的东西,一个产品属于多个类别,一个类别有很多产品。

在我创建新产品的管理视图中,我能够允许用户选择该产品应列在其下的多个类别“标签”。

由于类别如此之多,我倾向于避免多选列表,并使用一种带有 ajax 的自动建议来检索类别并使用 jQuery 插件(例如 TagIt)填充它们。

但为了简单起见,您可以在控制器中使用它

public class HomeController : Controller
{
    public ActionResult Create()
    {
        var tags = new List<Tag>()
            {
                new Tag() { TagId = 1, Name = "Planes", Posts = new Collection<Post>() },
                new Tag() { TagId = 2, Name = "Cars", Posts = new Collection<Post>() },
                new Tag() { TagId = 2, Name = "Boats", Posts = new Collection<Post>() }
            };

        ViewBag.MultiSelectTags = new MultiSelectList(tags, "TagId", "Name");

        return View();
    }

    [HttpPost]
    public ActionResult Create(Post post, int[] tags) // Tags is not case-sensative from model binder when html element name="tags" <-- array passed back to controller
    {

        // Find Tag from Database
        // Attach tag entity to Post

        // foreach(var tagId in tags)
        //    var tag = context.Tags.find(tagId)
        //    post.Tags.Add(tag);

        // context.SaveChanges();

        return RedirectToAction("Create");
    }

}

在你的 View/Create.cshtml 里面

@model MvcApplication1.Models.Post

<h2>Create</h2>


@using (Html.BeginForm("Create", "Home", FormMethod.Post))
{
    <label>Name</label>
    @Html.TextBoxFor(model => model.Name)

    <label>Tags For Post</label>
    @Html.ListBox("Tags", (MultiSelectList)ViewBag.MultiSelectTags)

    <input type="submit" value="Submit Post"/>
}

所有选定的标签:

然后,当在回发到控制器时选择多个时,您可以在调试中看到模型绑定器知道从 html 元素名称“tags”发送回数组

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mvc 4 MultiSelect 列表和 EF 多对多 的相关文章

随机推荐