Как вернуться обратно в View, содержащий renderpartial
Я создаю простой блог, в моей статье у меня есть функция частичного комментария. Я могу передать данные в контроллер и успешно сохранить данные, но возникает ошибка при возврате к просмотру статьи, содержащему "Комментарий".
Вот моя страница Article.cshtml:
@model SimpleBlog.Post
<p class="lead" style="text-align:justify; word-wrap:break-word">
@Html.Raw(Model.Body)
</p>
<hr />
<div class="well">
<h4>Leave a Comment:</h4>
@Html.Partial("PostComment", new SimpleBlog.Comment(), new ViewDataDictionary {{"PostId",Model.ID} })
</div>
<hr />
PostComment.cshtml
@model SimpleBlog.Comment
@using (Ajax.BeginForm("PostComment", "Home", new { PostId = Convert.ToInt32(ViewData["PostId"]) }, new AjaxOptions { HttpMethod = "POST" }))
{
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.TextAreaFor(model => model.Body, 3, 10, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Body, "", new { @class = "text-danger" })
</div>
<input type="submit" value="Submit" class="btn btn-primary" />
}
Контроллер для комментариев:
[HttpPost]
public ActionResult PostComment(Comment comment, int PostId)
{
if (comment != null)
{
comment.PostID = PostId;
string sdate = DateTime.Now.ToShortDateString();
comment.DateTime = DateTime.Parse(sdate);
db.Comments.Add(comment);
db.SaveChanges();
return RedirectToAction("ReadMore");
}
return View();
}
Вот ошибка: Словарь параметров содержит пустую запись для параметра 'Id' непустого типа 'System.Int32' для метода 'System.Web.Mvc.ActionResult ReadMore(Int32)' в 'SimpleBlog.Controllers.HomeController', Необязательный параметр должен быть ссылочным типом, обнуляемым типом или быть объявлен как необязательный параметр. Имя параметра: параметры
Пожалуйста, помогите мне, большое спасибо.
1 ответ
Функция, на которую вы перенаправляете (ReadMore), ожидает, что вы передадите идентификатор типа (int).
Попробуйте следующее:
[HttpPost]
public ActionResult PostComment(Comment comment, int PostId)
{
if (comment != null)
{
comment.PostID = PostId;
string sdate = DateTime.Now.ToShortDateString();
comment.DateTime = DateTime.Parse(sdate);
db.Comments.Add(comment);
db.SaveChanges();
return RedirectToAction("ReadMore",new { Id = PostId});
}
return View();
}