Передача нескольких значений в представление - PullRequest
1 голос
/ 09 марта 2012

У меня есть представление, которое я хочу взять в ветке и в комментарии, чтобы при написании сообщения оно имело и то, и другое, и я мог обновить оба.

Вот представление:

@model GameDiscussionBazzar.Data.Comment
 @{
    ViewBag.Title = "EditComment";
    Layout = "~/Views/Shared/_EditCommentLayout.cshtml";
}
<div class="EditComment">
<h1>
    Edit Comment
</h1>
@using (Html.BeginForm("EditThreadComment", "Comment"))
{
    <div class="EditingComment">
        @Html.EditorForModel()
        @Html.Hidden("comment", Model)
        @Html.HiddenFor(i => i.ParentThread)
        <input type="submit" value="Save"/>
        @Html.ActionLink("Return without saving", "Index")

    </div>
}
</div>

У меня есть 2 метода, один - просто результат действия и возвращает представление, в то время как другой - сообщение, которое возвращается на главную страницу в случае успеха.вот методы:

public ActionResult EditThreadComment(int commentId)
    {
        Comment comment = _repository.Comments.FirstOrDefault(c => c.Id == commentId);

        return View(comment);
    }
    [HttpPost]
    public ActionResult EditThreadComment(Comment comment, Thread thread)
    {
        var c = thread.ChildComments.FirstOrDefault(x => x.Id == comment.Id);
        thread.ChildComments.Remove(c);
        if (ModelState.IsValid)
        {
            _repository.SaveComment(comment);
            thread.ChildComments.Add(comment);
            _tRepo.SaveThread(thread);
            TempData["Message"] = "Your comment has been saved";
            return RedirectToAction("Index", "Thread");
        }
        else
        {
            TempData["Message"] = "Your comment has not been saved";
            return RedirectToAction("Index", "Thread");
        }
    }

Итак, опять мой вопрос: как передать 2 параметра в представление?Или как мне передать значения моей темы?

Ответы [ 3 ]

4 голосов
/ 09 марта 2012

Чтобы передать несколько значений назад, вы должны создать ViewModel, который может содержать любые объекты и значения, которые вы хотите изменить, и (в конечном итоге) передать его обратно в представление.

Итак, создайте новыймодель вот так ... (сейчас я не в компиляторе, поэтому я прошу прощения, если какой-то из этого кода не собирается)и далее между вашей PostViewModel.

public ActionResult EditThreadComment(int commentId)
{
    PostViewModel post = new PostViewModel();

    Comment comment = _repository.Comments.FirstOrDefault(c => c.Id == commentId);
    post.Comment = comment;
    post.Thread = new Thread();

    return View(post);
}

public ActionResult EditThreadComment(PostViewModel post)
{
    Comment comment = post.Comment;
    Thread thread = post.Thread;

    // Now you can do what you need to do as normal with comments and threads
    // per the code in your original post.
}

И, по вашему мнению, теперь вы будете строго типизированы в PostViewModel.Итак, наверху ...

@model GameDiscussionBazzar.Data.PostViewModel

И вам нужно будет просто пройти на один уровень глубже, чтобы добраться до отдельных объектов Comment и Thread.

1 голос
/ 09 марта 2012

Вы можете создать класс ViewModel для хранения комментария и потока, а затем передать эту единственную модель представления в представление, которое затем сможет получить доступ как к комментарию, так и к потоку внутри него.

0 голосов
/ 09 марта 2012

Вы можете использовать ViewBag.Thread = myThread

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...