Как вернуться обратно в 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();
        }
Другие вопросы по тегам