C# 从Html.renderAction子级重定向父页面,而不使用Ajax、Java、Jquery等
我有一个问题,在Html.RenderAction中有一个表单,提交表单后,我必须重新加载父级,但我不断得到“子操作无法执行重定向操作”。那么,如果没有Ajax等,我如何解决它呢 在我的父母身上,我有: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); }
@{
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();
}