- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一种简单(也可能是粗糙)的方式来管理我正在构建的博客上的评论。这是一个学习/有趣的项目,所以我正在尽我所能来熟悉一些不同的技术。我想知道我的逻辑是否有任何漏洞,或者我正在做的事情是否有更好的实现。我将允许在网站上发表匿名评论,但我想对我认为不合适的任何内容进行审核。这是我的做法:
我的模型使用 EF 代码优先方法:
public class Comment
{
public int Id { get; set; }
public bool Moderated { get; set; }
public string DisplayName { get; set; }
public string Email { get; set; }
public DateTime DateCreated { get; set; }
public string Content { get; set; }
public int PostId { get; set; }
public Post Post { get; set; }
}
这里是标准的东西。然后我创建了一个 ViewModel 来显示博客文章的详细信息以及页面上与之相关的所有评论,如下所示:
public class PostCommentViewModel
{
public Post Post { get; set; }
public List<Comment> Comment { get; set; }
public PostCommentViewModel(int postId)
{
var db = new BlogContext();
Post = db.Posts.First(x => x.Id == postId);
var query = from x in db.Comments where x.PostId == postId && x.Moderated == true select x;
Comment = query.ToList();
}
}
对于评论,这只抓取与 PostId 相关且已审核的评论(即我已经能够审核它们)
对于显示这个的 View ,我只使用了一个基础脚手架模板:
public ActionResult Details(int id = 0)
{
var viewModel = new PostCommentViewModel(id);
return View(viewModel);
}
cshtml:
@model CodeFirstBlog.ViewModels.PostCommentViewModel
<fieldset>
<legend>PostCommentViewModel</legend>
@Html.DisplayFor(x => x.Post.Title)
<br />
@Html.DisplayFor(x => x.Post.Content)
<br />
@Html.DisplayFor(x => x.Post.CreatedDate)
<hr />
@foreach(var comment in Model.Comment)
{
@Html.DisplayFor(x => comment.Content)
<br />
@Html.DisplayFor(x => comment.DateCreated)
<br />
@Html.DisplayFor(x => comment.DisplayName)
<br />
@Html.DisplayFor(x => comment.Email)
<br />
<hr />
}
</fieldset>
@Html.ActionLink("Add Comment", "AddComment", new { id = Model.Post.Id} )
这是Controller中的AddComment
public ActionResult AddComment(int id = 0)
{
return View();
}
[HttpPost]
public ActionResult AddComment(Comment comment, int id)
{
if (ModelState.IsValid)
{
comment.PostId = id;
db.Comments.Add(comment);
db.SaveChanges();
return RedirectToAction("Details", "Blog", new { id = id });
}
return RedirectToAction("Details", "Blog", new { id = id });
}
因此,当我添加评论时,Moderated 默认为 false,因此评论不会立即显示。现在,如果管理员登录,他可以转到 ViewModeration View ,该 View 只返回所有等待批准的评论的列表:
public ActionResult ViewModeration()
{
var comments = from x in db.Comments where x.Moderated == false select x;
return View(comments);
}
如果他点击批准按钮,它会在 Controller 中执行:
public ActionResult ApproveComment(int id)
{
Comment c = (from x in db.Comments
where x.Id == id
select x).First();
c.Moderated = true;
db.SaveChanges();
return RedirectToAction("ViewModeration");
}
我真正想知道的是:
最佳答案
到目前为止,该模型似乎暂缓,所以我将这样回答问题:
此实现中是否存在任何漏洞,例如知情用户是否可以覆盖回发中的适度值?
是的。我没有基于您发送的任何 FORM 代码,但我假设您正在通过发布值创建评论并直接保存到数据库中。这可能很糟糕。您最好只从用户那里获取您需要的值,然后将其余值填充到 Controller 中:
public ActionResult AddComment(Comment comment, int id)
{
if (ModelState.IsValid)
{
// NEW
comment.Moderated = false;
comment.PostId = id;
db.Comments.Add(comment);
db.SaveChanges();
return RedirectToAction("Details", "Blog", new { id = id });
}
return RedirectToAction("Details", "Blog", new { id = id });
}
是否有更简单或更优雅的解决方案可供遵循?同样,我不想使用任何预建的东西。这个项目的重点是学习东西。
如前所述,到目前为止这看起来不错。但是,出于可重用性和测试目的,我可能会在不同的类中获取数据库操作,例如服务或存储库。
所以,代码看起来像这样:
public ActionResult AddComment(Comment comment, int id)
{
if (ModelState.IsValid)
{
CommentService.Save(comment);
return RedirectToAction("Details", "Blog", new { id = id });
}
return RedirectToAction("Details", "Blog", new { id = id });
}
这不是一个大的变化,但从某种意义上说,如果您想重用这段代码,它会给您带来更大的灵 active 。
至于您的 PostCommentViewModel 类,我不会在 ViewModel 中执行任何操作,尤其是在构造函数中。您应该使用 ViewModel 的方式是将数据绑定(bind)到它上面,而不是让 ViewModel 完成这项工作。无论如何,您都可以从中获取数据,ViewModel 仅代表需要显示的结构。因此,从那里获取代码,并将其放入服务(即 CommentService)中。
关于c# - 简单的 MVC 评论审核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11265955/
我正在使用评论系统,现在,我想重写 url 评论的片段并附加一个符号#,我想将页面部分移动到评论列表,正好是最后一个评论用户,带有 username 我在发表评论时使用 next 重定向用户: {
这个问题在这里已经有了答案: "Rate This App"-link in Google Play store app on the phone (21 个回答) 关闭2年前。 有没有一种方法可以要
长期潜伏者第一次海报... 我们正在使用 Facebook 的 API 将其集成到我们的网络应用程序中,并且我们能够通过 {page-id}/ratings 部分中的 {open_graph_stor
我正在尝试让 Visual Studio 2012 自动格式化我的评论 block ,就像它对我的 C# block 所做的那样。我希望我的评论看起来像这样: /* * Here is my C#
在 MySQl 中创建表时对每个字段进行注释是否会影响性能?我正在处理一个包含 1000 多个表的数据库,几乎每个表中的每个字段都有注释。我只是想知道这是否会以任何方式影响 MySQL 的性能? 最佳
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
这个问题在这里已经有了答案: SQL select only rows with max value on a column [duplicate] (27 个答案) 关闭 5 年前。 我这里有 2
如何在评论中正确编写 --> 或 -->? 我正在维护一个包含许多小程序代码条目的大型 html 文件。说: a --> b. 我在 HTML 中将其编码为 -->: a --> b. 但是,我
这是一个简单的问题。有没有办法允许用户直接在我的应用程序中输入评论和/或评级,并将这些数据发回 Android Market?如果是这样,如果我使用 EditText View 允许用户输入,代码会是
注释是否表示代码中带有//或/* */的注释? 最佳答案 不,注释不是评论。使用语法 @Annotation 将注释添加到字段、类或方法。最著名的注解之一是@Override,用于表示方法正在覆盖父类
我有一个包含两个模型的 Django 应用程序:第一个是 django.contrib.auth.User,第二个是我创建的 Product。 我会为每个产品添加评论,因此每个注册用户都可以为每个产品
有没有办法评论多行......其中已经有一些评论? 即 ... Hello world! Multi-line comment end --> 看来连
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: obj.nil? vs. obj == nil 现在通过 ruby koans 工作,发现这个评论嵌入在
这是一个基本问题 .gemrc 文件中是否允许注释? 如果是,你会怎么做? 我这里查了没用 docs.rubygems.org/read/chapter/11 最佳答案 文档说:The config
有没有办法在 SASS 中添加 sass-only 注释?你知道,所以输出 .css 文件没有那些注释 例如, /* global variables */ $mainColor: #666; /*
我想搜索在任何媒体上发布的评论中的任何特定关键字或几个关键字的组合。我的要求是在 API 的帮助下获取包含该关键字的评论。我浏览了 Instagram API 的文档,发现只能通过哈希标签进行搜索,而
在 WordPress 中,您可以在页面加载之前执行以下操作来编辑文章的内容: add_filter('the_content', 'edit_content'); function edit_con
在指示要合并的内容时, checkin 合并的最佳方法是什么?我已经说过 10 个变更集我正在从我的主分支合并到一个发布分支。每一个都包含我在 checkin 主分支时写的详细注释。现在,当我合并时,
我知道如何查询常规网站的社交参与度计数。可以使用Facebook图形浏览器(https://developers.facebook.com/tools/explorer/)或throug api轻松实
我正在尝试从 YouTube 视频中获得特定评论。例如,我想从 YouTube 视频的第 34 条评论中获取详细信息。有谁知道在不阅读所有评论列表的情况下我该怎么做? 或者,如果没有任何解决方案可以仅
我是一名优秀的程序员,十分优秀!