加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – mvc 4 MultiSelect列表和EF多对多

发布时间:2020-12-16 03:39:42 所属栏目:asp.Net 来源:网络整理
导读:我有这些实体(它们之间存在多对多的连接): public class Post{ public Guid PostId { get; set; } public string Name { get; set; } public virtual ICollectionTag Tags { get; set; }} public class Tag{ public int TagId { get; set; } public string
我有这些实体(它们之间存在多对多的连接):

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)填充它们.

但为简单起见,您可以在Controller中使用它

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",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”发回数组

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读