我在编辑页面中使用了modal,这是我的代码:
在视图中
<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
Edit
</button>
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Edit Event Information</h4>
</div>
<div class="modal-body">
@Html.Action("Edit", "Admin",new { id = Model.events_info_id,@class = "btn btn-warning"})
</div>
</div>
</div>
</div>
这个控制器用于获取要在模态中显示的信息:
[ChildActionOnly]
public ActionResult Edit(int id = 0)
{
Events_Info_tbl events_info_tbl = db.Events_Info_tbl.Find(id);
if (events_info_tbl == null)
{
return HttpNotFound();
}
return PartialView(events_info_tbl);
}
这是模态内容的视图:
@model Online_Ballot.Models.Events_Info_tbl
<script src="~/Scripts/Datepicker.js"></script>
<div class="modal-body" style="color:green">
<h2>Edit Events</h2>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.events_info_id)
<div class="form-group">
<label for="usr">Event Name:</label>
@Html.EditorFor(model => model.events_name, new { @class="form-control"})
@Html.ValidationMessageFor(model => model.events_name)
</div>
<div class="form-group">
<label for="usr">Votation Date:</label>
@Html.EditorFor(model => model.events_votation_date, new { @id="voters_bdate"})
@Html.ValidationMessageFor(model => model.events_votation_date)
</div>
<div class="form-group">
<label for="usr">Votation Place:</label>
@Html.EditorFor(model => model.events_place, new { @class="form-control"})
@Html.ValidationMessageFor(model => model.events_place)
</div>
<div class="form-group">
<label for="comment">Event Description:</label>
@Html.TextAreaFor(model => model.events_desc)
</div>
<div class="form-group">
<label for="usr">Is active:</label>
@Html.EditorFor(model => model.is_active, new { @class="form-control"})
@Html.ValidationMessageFor(model => model.is_active)
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Save changes</button>
</div>
}
此控制器将更新数据:
// POST: /Admin/Edit/5
[ValidateAntiForgeryToken]
public ActionResult Edit(Events_Info_tbl events_info_tbl)
{
if (ModelState.IsValid)
{
db.Entry(events_info_tbl).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(events_info_tbl);
}
当我尝试运行此代码时出现此错误:
不允许子操作执行重定向操作。
但是,它会更新数据,我想不允许调用RedirectToAction
函数,但我需要。我该如何解决这个问题?
答案 0 :(得分:1)
您的孩子行为不应该尝试更新任何内容。它应该是获取数据,填充内容并返回一些视图。
您可能希望将操作拆分为两个操作。一个用于呈现“编辑”表单,另一个用于更新该表单。
[HttpPost]
public ActionResult Edit(Events_Info_tbl events_info_tbl)
{
if (ModelState.IsValid)
{
//Save
return RedirectToAction("Index");
}
//Return view
//NOTE: Make sure your page state is preserved i.e. your modal is open
return View(events_info_tbl);
}
[ChildActionOnly]
public PartialViewResult RenderEditForm(int id)
{
//Build form data
return PartialView("_EditForm");
}
另一个注意事项,你在这里与“编辑”和“部分”剃刀助手如何工作有一些冲突。对于将数据放入控制器模型没有意义的视图,子操作很有用。如果模型适合,那么只需使用“编辑器”或“部分”
<强>更新强>
此...
@Html.Action("Edit", "Admin",new { id = Model.events_info_id,@class = "btn btn-warning"})
似乎指向了这个......
public ActionResult Edit(Events_Info_tbl events_info_tbl)
当你真的希望它指向这个......
public ActionResult Edit(int id = 0)
在Html.Action
@Html.Action("Edit", "MyController",new { id = Model.events_info_id,@class = "btn btn-warning"})