Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有集合的模型类的强类型视图_C#_Asp.net_Asp.net Mvc_Nhibernate - Fatal编程技术网

C# 具有集合的模型类的强类型视图

C# 具有集合的模型类的强类型视图,c#,asp.net,asp.net-mvc,nhibernate,C#,Asp.net,Asp.net Mvc,Nhibernate,我试图做一些类似个人博客的事情,但我遇到了一个问题。我有一个强打印的表格,可以编辑我的文章。我能够更新简单的栏目,如标题,内容。。。但我不知道如何处理映射为多对多集合的标记集合。这里的最佳实践是什么?我可以使用一些HTML帮助程序,比如那些用于简单列的帮助程序吗?或者每次我都需要创建一个新集合?老实说,我不知道 模范班 public class Post : IEntity { public virtual int Id{ get; set; } [Re

我试图做一些类似个人博客的事情,但我遇到了一个问题。我有一个强打印的表格,可以编辑我的文章。我能够更新简单的栏目,如标题,内容。。。但我不知道如何处理映射为多对多集合的标记集合。这里的最佳实践是什么?我可以使用一些HTML帮助程序,比如那些用于简单列的帮助程序吗?或者每次我都需要创建一个新集合?老实说,我不知道

模范班

public class Post : IEntity
    {
        public virtual int Id{ get; set; }

        [Required(ErrorMessage = "Každý článek musí mít titulek")]
        [MaxLength(250, ErrorMessage ="Nadpis může mít maximálně 250 znaků")]
        public virtual string Title { get; set; }
        public virtual string Annotation { get; set; }
        [AllowHtml]
        public virtual string Content { get; set; }
        public virtual User Author { get; set; }
        public virtual DateTime CreationDate { get; set; }
        public virtual Rating Rating { get; set; }
        public virtual string PreviewImageName { get; set; }
        public virtual string ContentImageName { get; set; }
        public virtual Category Category { get; set; }

        public virtual IList<Tag> Tags { get; set; }
        public virtual IList<BlogImage>Gallery { get; set; }
    }
}
公共类职位:IEntity
{
公共虚拟整数Id{get;set;}
[必需(ErrorMessage=“Každýčlánek musímít titulek”)]
[MaxLength(250,ErrorMessage=“Nadpis může mít maximálně250 znaků”)]
公共虚拟字符串标题{get;set;}
公共虚拟字符串批注{get;set;}
[allowtml]
公共虚拟字符串内容{get;set;}
公共虚拟用户作者{get;set;}
公共虚拟日期时间创建日期{get;set;}
公共虚拟评级{get;set;}
公共虚拟字符串PreviewImageName{get;set;}
公共虚拟字符串ContentImageName{get;set;}
公共虚拟类别{get;set;}
公共虚拟IList标记{get;set;}
公共虚拟IListGallery{get;set;}
}
}
到目前为止,我能够用html助手完成所有的CRUD,比如这些

<div class="form-group">
            <div class="col-sm-10">
                <label>Anotace</label>
            </div>
                <div class="col-sm-10">
                    @Html.TextAreaFor(x => x.Annotation, new { @class = "form-control", @rows = 5 })
                    @Html.ValidationMessageFor(x => x.Annotation)
                </div>
            </div>
        <div class="form-group">
            <div class="col-sm-10">
                <label>Obsah</label>
            </div>
                <div class="col-sm-10">
                    @Html.TextAreaFor(x => x.Content, new { @class = "form-control formatedText", @rows = 20 })
                    @Html.ValidationMessageFor(x => x.Content)
                </div>
            </div>

阿诺塔克
@TextAreaFor(x=>x.Annotation,新的{@class=“form control”,@rows=5})
@Html.ValidationMessageFor(x=>x.Annotation)
奥巴
@Html.TextAreaFor(x=>x.Content,新的{@class=“form control formattext”,@rows=20})
@Html.ValidationMessageFor(x=>x.Content)

您基本上需要使用一些客户端javascript来创建直观的用户界面来处理用户添加的集合属性。它可以是一个项目或100个项目

下面是一个非常简单的方法,它允许用户在文本框中输入帖子的每个标签。用户将能够动态添加一个文本框,为帖子输入标签名

假设在后期创建中有这样的视图模型

public class PostViewModel
{
   public int Id { set; get; }
   public string Title { get; set; }
   public List<string> Tags { set; get; }
}

很抱歉你的问题是什么?你能说得更具体一点吗?你好,很抱歉你不能理解我的问题。我想问的是,在强类型视图中处理模型类集合的最佳实践是什么。我可以为简单属性(比如字符串标题,甚至用户作者)使用HTML帮助程序。但是我不知道如何处理那里的集合。在你的控制器参数中使用ListYeah,好的,我有一个单帖子的强类型视图。我想编辑他的所有标签(帖子有标签集合)。我想知道这方面的最佳做法。
@model PostViewModel
<h2>Create Post</h2>
@using (Html.BeginForm("Create","Post"))
{
   @Html.LabelFor(g=>g.Title)
   @Html.TextBoxFor(f=>f.Title)

    <button id="addPost">Add Tag</button>
    <label>Enter tags</label>
    <div id="tags">
        <input type="text" class="tagItem" name="Tags" />
    </div>
    <input type="submit"/>
}
@section scripts
{
    <script>
        $(function() {
            $("#addPost").click(function(e) {
                e.preventDefault();
                $(".tagItem").eq(0).clone().val("").appendTo($("#tags"));
            });
        });
    </script>
}
[HttpPost]
public ActionResult Create(PostViewModel model)
{
   var p = new Post { Title = model.Title };
   //Assign other properties as needed (Ex : content etc)
   p.Tags = new List<Tag>();  
   var tags = db.Tags;
   foreach (var item in model.Tags)
   {
      var existingTag = tags.FirstOrDefault(f => f.Name == item);
      if (existingTag == null)
      {
        existingTag = new Tag {Name = item};
      }
      p.Tags.Add(existingTag);
    }
    db.Posts.Add(p);
    db.SaveChanges();
    return RedirectToAction("Index","Post");
}