可重用的MVC模态窗口控件

在本文中,将探讨如何创建一个可重用的MVC模态窗口控件。这个控件基于MVC框架,利用HtmlHelper扩展和Razor语法,可以轻松地在视图中实现自定义的弹出控件。为了更好地理解本文,需要对jQuery、MVC和C#代码有一定的了解。

如何使用代码

要在视图中添加这个控件,需要确保将控件添加到页面上,并分配所有必要的属性。这些属性将帮助管理模态窗口的行为。

首先,需要定义模态窗口的标题:

@(Html.HollowPoint().Window().Name("modalPopup").TemplateViewPath("~/Views/Shared/BootstrapModal.cshtml").Title("Hello new world!"))

然后,提供一个想要重用的模板。这个模板就像是客户端控件的构建块。模板需要实现希望看到的控件的客户端UI结构。在本例中,提供了一个Bootstrap模态HTML模板。

控件在行动

包含了一个示例,其中列出了在GridView中显示的一组“人员”。在这个示例中,展示了如何将弹出窗口与GridView或列表结合使用。这允许在同一页面内快速编辑这些人的“详细信息”。

列出所有包含在提供的模型中的人员:

@foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.Value.Name) </td> <td> @Html.DisplayFor(modelItem => item.Value.LastName) </td> <td> @Html.DisplayFor(modelItem => item.Value.Address) </td> <td> <a href="#" data-id="@item.Key" class="my-edit">Edit</a> </td> </tr> }

现在,需要编辑这些人中的一个。当GridView中的“编辑”按钮被点击时,模态窗口控件将出现。需要“获取”试图“编辑”的特定人员的细节。在本例中,将通过Ajax调用调用"/People/GetPerson"控制器。在这里,可以选择是否调用Web API或控制器方法。

当点击“编辑”按钮时,执行以下操作:

$(".my-edit").click(function() { // 显示'OK'按钮 $('.modal-footer').find('.btn-primary').first().show(); clearContent(); // 找到这个特定项目的独一无二的键 var idx = $(this).attr("data-id"); // 存储这个独一无二的'键' - 因为稍后会需要它 $("#currentID").val(idx); // 让去获取这个'人' $.ajax({ url: "/People/GetPerson?idx=" + idx, datatype: "application/json", type: "GET", cache: false, success: function(data) { // 这个调用为创建了一个部分视图,并返回了HTML // 所需要做的就是将其放置在模态的内部内容区域 var dialog = $("#modalPopup") .modalpopup("populateContent", data) .modalpopup("show"); }, error: function(e) { var test = e; } }); });

模态窗口内部的内容被包裹在一个DIV中 - 模态的内容根据返回的Ajax调用进行填充,即内容的"HTML"是从服务器检索的。在本例中,检索了一个"Person"的内容,即将"Person"模型绑定到部分视图:"_Person.cshtml"。

C#控制器方法

这里是控制器方法被调用的地方。可以决定如何处理传入的参数:

public ActionResult GetPerson(string idx) { Person person; if (p.GetPeopleDictionary().TryGetValue(int.Parse(idx), out person)) { // 让返回一个部分视图 - 传递"Person"模型 return PartialView("~/Views/Home/_Person.cshtml", person); // 也可以传递Person模型的JSON对象 - 如果愿意 // 必须"AllowGet"以通过安全限制 // return Json(person, JsonRequestBehavior.AllowGet); } else return null; }

为了更新选定的Person的详细信息,必须跟踪想要显示以更新目的的记录(或"键")。可以通过确保在"编辑"链接中添加一个键值作为"属性"来做到这一点。

<a href="#" <b>data-id="@item.Key"</b> class="my-edit">Edit</a> [HttpPost] public ActionResult Edit(int id, Person person) { Person found; int key = int.Parse(id.ToString()); if (p.GetPeopleDictionary().TryGetValue(key, out found)) { found.Name = person.Name; found.Address = person.Address; found.LastName = person.LastName; return Content("Well done. " + found.Name + " - has now been updated!"); } else { return Content("Nope! Something went wrong."); } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485