首先,我使用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" })){ %>
答案 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);
}
%>
所以基本上,正在发生的事情是,子动作通过使用父视图的数据“告诉”父动作刷新自己。
这是一种黑客行为,但它适用于您正在做的事情。