Asp.Net Mvc 2 - RenderAction List с созданием - PullRequest
2 голосов
/ 03 марта 2010

Сначала я использую Asp.Net MVC 2 RC 2.

То, что я хочу сделать, это вывести список комментариев, а под ним можно добавить комментарий (с проверками). Например, что-то вроде того, когда вы добавляете комментарий в stackoverflow. За исключением того, что моя страница должна работать с включенным JavaScript или без него.

Итак, чтобы решить эту проблему, я использую новый RenderAction, и он частично решил мою проблему. Я получил мой список, который вызывает мой addcomment usercontrol с RenderAction.

Проверочные работы. Моя проблема возникает, когда я пытаюсь добавить комментарий, который является действительным. Страница не обновилась правильно. Если я попал в базу данных, мой комментарий добавляется, но он не обновлялся в моем представлении списка, а форма добавления комментария не ясна.

Я думаю, это из-за того, как отображается рабочий процесс.

Может быть, если у кого-то есть пример или блог об этом, это может помочь мне сделать это правильно ...

Внизу моего комментария / List.aspx

<% Html.RenderAction("Create", "Comment"); %>

In Comment / Create.ascx

<% using (Html.BeginForm(
       ViewContext.ParentActionViewContext.RouteData
           .Values["action"].ToString(),
       ViewContext.ParentActionViewContext.RouteData
           .Values["controller"].ToString(), 
       FormMethod.Post, new { id = "createForm" })){ %>

1 Ответ

2 голосов
/ 04 марта 2010

Вы можете принудительно обновить родительский вид с помощью небольшого хака, включающего ViewContext.ParentActionViewContext.

В вашем классе CommentController:

public ActionResult Create(Comment comment)
{
    ...
    if (isValid) // Comment entered in form is valid
    {
        ControllerContext.ParentActionViewContext.ViewData["SuccessfullCreate"] = true;
    }
    ...
}

А на вашей странице комментариев / List.aspx (просмотр):

<% Html.RenderAction("Create", "Comment"); %>
<%
    if (ViewContext.ViewData["SuccessfulCreate"] != null)
    {
        string action = ViewContext.RouteData.Values["action"].ToString();
        string controller = ViewContext.RouteData.Values["controller"].ToString();
        string url = "/" + controller + "/" + action;

        Response.Redirect(url);
    }
%>

Итак, в основном происходит то, что дочернее действие "сообщает" родительскому действию обновить себя, используя ViewData родителя.

Это что-то вроде хака, но оно отлично работает для того, что вы делаете.

...