当我尝试通过操作CommentReview
为CreateComment
模型创建一行时,我收到了以下错误。
一个或多个实体的验证失败。看到 ' EntityValidationErrors'物业详情。
我对发送到我的模型的数据做错了,但我不知道是什么。我也尝试使用(DbEntityValidationException e)
方法没有成功,因为我无法使用我的代码,因为我不是一位经验丰富的编码员,也不是MVC的新手。
以下代码来自我的控制器:
// GET: Review/Create
[HttpGet]
public ActionResult CreateComment() {
return View();
}
// POST: Review/Create
[HttpPost]
public ActionResult CreateComment(Guid? id) {
if (ModelState.IsValid)
{
Guid userID = new Guid(Session["LoggedUserID"].ToString());
Guid reviewID = new Guid(id.ToString());
CommentReview rComment = new CommentReview();
rComment.UserId = userID;
rComment.ReviewId = reviewID;
rComment.CreatedDate = DateTime.Now;
db.CommentReviews.Add(rComment);
db.SaveChanges();
return RedirectToAction("Index");
}
return View();
}
评论模型评论:
public System.Guid Id { get; set; }
public System.Guid UserId { get; set; }
public System.Guid ReviewId { get; set; }
public string Comment { get; set; }
public System.DateTime CreatedDate { get; set; }
我如何将数据发送到模型:
Id
正在生成自己的Guid密钥UserID
从Session["LoggedUserID"]
Comment
是通过View 查看CreateComment的代码:
@model xxxx.CommentReview
@{
ViewBag.Title = "CreateComment";
}
<h2>CreateComment</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>CommentReview</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Comment, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Comment, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Comment, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
答案 0 :(得分:1)
由于您正在撰写评论的评论,您应该接受GET操作方法中的评论ID作为参数,创建CommentReviewVm
类的对象并设置ReviewId
属性并发送到观点。
所以你的视图模型将是
public class CommentReviewVm
{
public Guid ReviewId { set;get;}
[Required]
public string Comment { set;get;}
}
在你的Action方法中,
public ActionResult CreateComment(Guid id)
{
return View(new CommentReviewVm { ReviewId=id});
}
因此,当有人参与此GET操作时,他们需要传递Id(这是审核ID)。例如:yourSiteName\Review\CreateComment\6ae6469d-8531-4bb6-8214-dbc65016288f
现在在您的视图中,您需要将此ReviewId保留在隐藏字段中,以便在您提交表单时,它将在HttpPost操作方法中可用。
@model CommentReviewVm
@using(Html.BeginForm())
{
@Html.HiddenFor(s=>s.ReviewId)
@Html.LabelFor(f=>f.Comment)
@Html.TextBoxFor(g=>g.Comment)
<input type="submit" />
}
现在在您的HttpPost操作方法中,使用此视图模型作为参数并读取值并将其用于保存
[HttpPost]
public ActionResult CreateComment(CommentReviewVm model)
{
if(ModelState.IsValid)
{
var m = new CommentReview { Comment = model.Comment, ReviewId=model.ReviewId };
m.userID = new Guid(Session["LoggedUserID"].ToString());
m.CreatedDate = DateTime.Now;
db.CommentToReviews.Add(m);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(model);
}
我看到你在代码中手动设置了ReviewId(Guid)。我不确定你想要什么价值。如果您再次添加评论评论,则在调用CreateComment操作方法时应该获取评论ID(应该是我在第一段中解释的url的一部分)。如果不是这种情况,请调整HttpPost操作方法以填充该值,