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