我几乎是一个 jquery 新手......我想我几乎已经完成了这项工作,如果我能澄清任何事情,请告诉我。
我有一个显示列表的屏幕..我们称他们为附属公司。要创建新的会员,使用模态样式弹出对话框。
单击对话框“创建”按钮时,必须保存表单数据(创建新会员),对话框消失,会员列表更新而无需重新加载页面
底部的 jquery 文件显示了我现在的尝试方式:尝试检测对“确认”按钮的点击,使用 data 目标属性获取要提交的表单,并使用表单的目标属性知道什么容器更新。
正在发生的事情是:什么都没有。取消按钮有效,创建按钮完全没有任何作用。
另请注意,将充当表单提交的“创建”按钮不在<form>
标签内。
我很确定我做错了模式,但让我们暂时忽略它,专注于异步帖子和列表更新。我在下面包含了我的相关代码以支持我的帖子。
--AffiliateListPartial
@model IPagedList<Acme.Business.DomainModel.Affiliates.Affiliate>
<div class="items-list" id="affiliate-list-view">
@foreach (var item in Model)
{
<a href="@Url.Action("AffiliateDetails", "Vendor", new { id = item.AffiliateId })">
//basic spans and razor display list in here..nothing notable
</a>
}
</div>
上面的部分视图包含在一个完整的视图中,我们称之为 AffiliateList。除了它由 VendorController/Affiliatelist 方法控制之外,没有什么特别相关的。
VendorController.AffiliateList 看起来像:
public ActionResult AffiliateList(string searchTerm = null, int page = 1)
{
var userId = WebSecurity.GetUserId(User.Identity.Name);
var model = (from a in db.Affiliates.ToList()
where a.VendorId == userId
select a).ToPagedList(page, 15);
if(Request.IsAjaxRequest()) return PartialView("_AffiliateListPartial", model);
return View(model);
}
用于创建新会员的模态风格对话(我将仅包括我认为相关的行):_Modal.AffiliateCreate.Partial
<form id="affiliate-create-form" class="form" method="post" action="@Url.Action("AffiliateCreate")" data-acme-ajax="true" data-acme-target="#affiliate-list-view">
// multiple input elements
</form>
<div class="modal-footer">
<button name="close_modal"><span>Cancel</span></button>
<button name="confirm" data-acme-target="#affiliate-create-form"><span>Create</span></button>
</div>
而 VendorController.AffiliateCreate 方法:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AffiliateCreate(Affiliate affiliate)
{
if (!ModelState.IsValid) return View(affiliate);
db.Affiliates.Add(affiliate);
db.SaveChanges();
return RedirectToAction("AffiliateList");
}
以及 .js 文件的相关部分:
$("button[name='confirm']").on("click", function() {
var $form = $(this).attr("data-acme-target");
var options = {
url: $form.attr("action"),
type: $form.attr("type"),
data: $form.serialize()
};
$.ajax(options).done(function (data) {
var $target = $($form.attr("data-acme-target"));
var $newHtml = $(data);
$target.replaceWith(data);
$newHtml.effect("highlight");
});
$(".modal_overlay").css("opacity", "0");
$(".modal_container").css("display", "none");
return false;
});
$("button[name='close_modal']").on("click", function(event) {
$(".modal_overlay").css("opacity", "0");
$(".modal_container").css("display", "none");
return false;
});