【发布时间】:2019-06-12 13:46:26
【问题描述】:
我有一个列出一堆项目的视图。我正在尝试做到这一点,以便当用户单击这些项目之一(来自表格行)的“动作事件”时,将出现一个弹出窗口。然后,用户可以更新有关此项目的相同信息,并提交信息或关闭它。无论他们选择哪个选项,我都会尝试关闭弹出窗口。
我已经完成了 90%,但我似乎无法解决一个小细节 - 按下提交按钮后关闭弹出窗口!我看到的许多解决方案似乎都不起作用,而且我似乎在调整它们以解决我的问题时遇到了一些麻烦。鉴于以下代码,我需要做哪些更改才能使其正常工作?
这是我所拥有的:
查看
Index.cshtml
<table>
@foreach (var item in Model)
<tr>
<td colspan="5" align="right">
<a href="javascript:void(0);" class="anchorDetail" data-id="@item.AID">Action Event</a>
</td>
</tr>
}
</table>
<div id="myModal" class="modal">
<div class="modal-dialog">
<div class="modal-content">
<div id="myModalContent"></div>
</div>
</div>
</div>
<script>
var TeamDetailPostBackURL = '/Database/Edit';
$(function () {
$(".anchorDetail").click(function () {
var $buttonClicked = $(this);
var id = $buttonClicked.attr('data-id');
var options = { "backdrop": "static", keyboard: true };
$.ajax({
type: "GET",
url: TeamDetailPostBackURL,
contentType: "application/json; charset=utf-8",
data: { "Id": id },
datatype: "json",
success: function (data) {
$('#myModalContent').html(data);
$('#myModal').modal(options);
$('#myModal').modal('show');
},
error: function () {
alert("Dynamic content load failed.");
}
});
});
});
</script>
弹出视图
Edit.cshtml
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.AID)
<table>
<tr>
<td>@Html.LabelFor(model => model.Comment)</td>
<td>@Html.TextAreaFor(model => model.Comment, new { @class = "form-control", rows = "5" })</td>
</tr>
<tr>
<td><input type="submit" value="Save" class="btn btn-primary" id="btnSave"/></td>
<td><button type="button" class="btn btn-primary" data-dismiss="modal">Cancel</button></td>
</tr>
</table>
</div>
}
控制器
DatabaseController.cs
public ActionResult Index()
{
return View(db.ActionableEvents.ToList());
}
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
ActionableEvents actionableEvents = db.ActionableEvents.Find(id);
if (actionableEvents == null)
{
return HttpNotFound();
}
return View(actionableEvents);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "AID,Comment")] ActionableEvents actionableEvents)
{
if (ModelState.IsValid)
{
db.Entry(actionableEvents).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(actionableEvents);
}
我确实在这里看到了这个资源:asp.net submit button close Jquery Ajax,但我只是不知道如何将其调整为我现在正在做的事情。
我现在拥有的取消按钮可以正常工作。有什么方法可以为我的提交按钮使用数据关闭并让它仍然像我为取消按钮一样保存数据?我还看到一些解决方案在提交按钮中使用了 onClick() 参数,但随后它会使用 window.close() 选项。我不想关闭整个窗口,也不想提示用户。
有什么好的方法可以解决这个问题?我希望我的提交按钮像我的取消按钮一样工作,只保存数据。提前感谢您的任何建议!!!
【问题讨论】:
-
我注意到您使用的是
Html.BeginForm,那么如何在不刷新页面的情况下发布模态数据?通常Ajax.BeginForm用于在不刷新页面的情况下发布表单。如果您想在表单的发布成功时绑定事件,这一点很重要。 -
嗯,在此之前,页面不是一个弹出窗口,而是一个实际的视图。当用户单击保存时,它将从控制器重定向。实际上,您仍然可以在控制器中看到 RedirectToAction("Index") 调用。显然,一旦我实现了这个弹出窗口,我就不会调用这个 RedirectToAction。有没有更好的方法可以发布我的数据?不知道如何使用 Ajax.BeginForm 来解决这个问题,但我会同时开始寻找。
-
是的,我会做以下
@using (Html.BeginForm(null, null, FormMethod.Post, new {@id="_id"})然后有一个jquery 函数preventsDefault一旦点击表单中的提交按钮就会触发。在这里你可以隐藏/切换模式 -
JamesS,我对如何隐藏/切换模式有点困惑。从我的弹出视图 (Edit.cshtml) 中工作,我更改了 @using 以匹配您发布的内容。然后,根据您的建议,在单击按钮后(再次,在我的 Edit.cshtml 文件中),我使用 jquery 来防止Default()。但是,我不明白如何切换模式。这是我需要在我的 Index.cshtml 文件中做的事情吗?如果是这样,我怎样才能让我的弹出视图与我的 Index.cshtml 文件通信以切换模式?
标签: c# jquery asp.net ajax asp.net-mvc