Asp.Net Mvc 2 - 带有创建的RenderAction列表

时间:2010-03-03 14:57:23

标签: asp.net-mvc .net-3.5 renderaction

首先,我使用Asp.Net MVC 2 RC 2。

我想要做的是列出评论视图,并在此视图下方添加评论(带有验证)。例如,类似于在stackoverflow中添加注释的内容。除了我的页面应该使用或不启用javascript。

所以为了解决这个问题,我使用了新的RenderAction,它部分地解决了我的问题。我得到了我的列表视图,它使用RenderAction调用我的addcomment usercontrol。

验证有效。当我尝试添加一个有效的评论时,我的问题就出现了。页面未正确刷新。如果我进入数据库,我的评论会被添加,但是我的列表视图中没有刷新,添加评论表单也不清楚。

我认为这是因为工作流的呈现方式。

也许如果某人有关于此的示例或博客,它可以帮助我做到正确......

在我的评论/ List.aspx的底部

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

在Comment / Create.ascx

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

1 个答案:

答案 0 :(得分:2)

您可以通过涉及ViewContext.ParentActionViewContext的小黑客强制父View刷新自己。

在CommentController类中:

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

在你的Comment / 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);
    }
%>

所以基本上,正在发生的事情是,子动作通过使用父视图的数据“告诉”父动作刷新自己。

这是一种黑客行为,但它适用于您正在做的事情。