C# 从Html.renderAction子级重定向父页面,而不使用Ajax、Java、Jquery等

C# 从Html.renderAction子级重定向父页面,而不使用Ajax、Java、Jquery等,c#,html,asp.net-mvc,C#,Html,Asp.net Mvc,我有一个问题,在Html.RenderAction中有一个表单,提交表单后,我必须重新加载父级,但我不断得到“子操作无法执行重定向操作”。那么,如果没有Ajax等,我如何解决它呢 在我的父母身上,我有: @{ var UserReviewExist = Model.Reviews.FirstOrDefault(x => x.AspNetUser.UserName == Name.AspNetUser.UserName); }

我有一个问题,在Html.RenderAction中有一个表单,提交表单后,我必须重新加载父级,但我不断得到“子操作无法执行重定向操作”。那么,如果没有Ajax等,我如何解决它呢

在我的父母身上,我有:

  @{ 
            var UserReviewExist = Model.Reviews.FirstOrDefault(x => x.AspNetUser.UserName == Name.AspNetUser.UserName);

        }

        @{if (UserReviewExist == null)
            {

                Html.RenderAction("ReviewCreate", "Reviews", new { BookID = Model.Id });
            }
        }
我的渲染视图包含以下内容:

    @model Trigger_Happy_Bunnies.Models.Review
@{
    Layout = null;
}
@{
    if (true)
    {
        Trigger_Happy_Bunnies.Models.Review newReview = new Trigger_Happy_Bunnies.Models.Review();
        <div style="border:1px black">
            @using (Html.BeginForm())
            {
                @Html.AntiForgeryToken()

                <div class="form-horizontal">
                    @Html.ValidationSummary(true, "", new { @class = "text-danger" })

那么在提交表单时如何更新父视图呢?

我不确定您的问题是什么。子动作只是将其响应转储到视图中。因此,在一天结束时,无论您使用的是子操作、部分操作还是在视图中直接插入代码,您都只需要一个包含表单的HTML文档

在没有参数的情况下调用
Html.BeginForm
,基本上说它应该使用当前动作,但即使在子动作的上下文中,这仍然是要呈现的主要动作。因此,您的表单将发布到主操作,而不是您的子操作

应该是这样的。您不能发布到子操作,因为这在网页上下文中没有意义。从技术上讲,只要未标记为
[ChildActionOnly]
,您就可以更改整个页面,但整个页面将更改为作为响应返回的部分视图,即SAN布局。如果您只想替换通过子操作呈现的区域,那么必须提交一个AJAX请求,返回部分响应,并手动将DOM中的相应节点替换为该响应


换句话说,这就是为什么子操作不能重定向。这不是一个真正的行动,它还没有被发送到。直到响应准备阶段,它才被呈现,到那时,响应中已经有了数据,阻止了任何更改,比如重定向。如果您需要在表单发布后重定向,您应该已经准备好了,只需确保您的主操作有一个处理发布的版本,然后从那里重定向即可。

代码的工作范围是将发布保存到数据库中,但不更新任何内容。那就是所有的字段都被填满了。如果在控制器中使用return View(),则子对象会闪烁,但所有内容都会保留。主版本不会以任何方式更新。但是谢谢!您帮助我了解了它的工作原理,并让我将post响应移动到正确的控制器。现在一切都好了!
                                <div class="form-group">
                                <div class="col-md-offset-2 col-md-10">

                                    <input type="submit" value="Create" class="btn btn-default" />
                                </div>
                            </div>
                        </div>
                    }
                </div>
            }
        }
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult ReviewCreate([Bind(Include = "Id,BookId,UserId,Text,Title,Rating,IsActive,IsReported,ReportedBy,ReportReason,ModifiedDate,ModifiedBy,CreatedDate")] Review review)
    {
        if (ModelState.IsValid)
        {
            db.Reviews.Add(review);
            db.SaveChanges();
            return View("~/Views/Reviews/ReviewCreate.cshtml");
        }

        ViewBag.UserId = new SelectList(db.AspNetUsers, "Id", "Email", review.UserId);
        ViewBag.BookId = new SelectList(db.Books, "Id", "UserId", review.BookId);
        return PartialView();
    }