[英]Redirecting parent page from Html.renderAction child without using Ajax, Java, Jquery or such
我有一个问题,我在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 });
}
}
我的RenderAction视图包含以下内容:
@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" })
并以
<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();
}
那么提交表单时如何更新父视图?
我不确定您的问题在这里。 子动作只是将其响应转储到视图中。 因此,归根结底,无论您使用子操作,部分操作还是仅在视图中放入代码,您都只有一个包含表单的HTML文档。
调用不带参数的Html.BeginForm
基本上表明它应该使用当前动作,但是即使在子动作的上下文中,它仍将是呈现的主要动作。 因此,您的表单将发布到该主要操作, 而不是您的子操作。
那是应该的 。 您无法发布到子操作中,因为这在网页上下文中是没有意义的。 从技术上讲,你可以 ,只要它没有被标记为[ChildActionOnly]
但整个页面会切换到该所返回的响应,SANS布局的局部视图。 如果您只想替换通过子操作渲染的区域,则必须提交一个AJAX请求,该请求返回部分响应,并用该请求手动替换DOM中的相应节点。
换句话说,这就是子动作无法重定向的原因。 这不是一个真正的行动,也没有被路由到。 直到响应准备阶段才渲染它,到那时,响应中已经有数据,从而防止了任何更改,例如重定向。 如果您需要在表单发布后进行重定向,则应已将其放置在适当的位置,只需确保您的主要操作具有处理发布的版本,然后从那里进行重定向。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.