asp.net-mvc – 删除Id MVC 5
发布时间:2020-12-16 06:33:48 所属栏目:asp.Net 来源:网络整理
导读:我正在使用BeginCollectionItem和MVC 5来添加和删除行. 我遇到的一个问题是删除功能,我遵循了一个在线教程 使用#divId指定:first似乎表示每次删除第一行.这对我没有好处,对最终用户没有意义. 因为我正在使用BCI,我想从html DOM中删除它们,因此它们不会有数
我正在使用BeginCollectionItem和MVC 5来添加和删除行.
我遇到的一个问题是删除功能,我遵循了一个在线教程 因为我正在使用BCI,我想从html DOM中删除它们,因此它们不会有数据库ID. 如何通过模型的Id删除,这显然(我想我在某处阅读)是由BCI自动生成的? 在主视图中删除功能 $('#deleterow').live('click',function () { $(this).parents('#newRow:first').remove(); return false; }); 部分视图与我想要通过Id删除的行 @model Mvc.Models.Project @using (Html.BeginCollectionItem("something")) { <div id="newRow"> @Html.LabelFor(m => m.Name) @Html.EditorFor(m => m.Name) <a href="#" id="deleterow">Delete</a> </div> } 更新2 在查看呈现的html时,data-action属性为所有对象呈现为0,因此JQuery不能也不会从视图中删除行/对象. 更新 我想假设这是可能的,而不是我想使用删除链接按钮的复选框?不是很熟悉jQuery,但我打算看一下,对MVC来说也是新手,但这是我到目前为止所做的: 主视图 <h3>Students</h3> <div id="newStudent"> @foreach(var Student in Model.students) { Html.RenderPartial("_Student"); } </div> <input type="button" id="addStudent" name="addStudent" value="Add Student"/> <input type="submit" value="Submit"/> @section Scripts { <script type="text/javascript"> $('#addStudent').on('click',function () { $.ajax({ async: false,url: 'School/AddNewStudent' }).success(function (partialView) { $('#newStudent').append(partialView); }); }); $('#newStudent').on('click','.deleteStudent',function () { var id = $(this).data('id'); if (id === 0) { // assumes Id is integer $(this).closest('.studentRow').remove(); } else { // existing item - controller to delete from Db var url = '@Url.Action("action","controller")'; $.post(url,{ ID: id },function (response) { if (response) { $(this).closest('.studentRow').remove(); } }).fail(function (response) { // display error message }); } }); </script> } 局部视图 @using (Html.BeginCollectionItem("students")) { <div id="studentRow"> @Html.HiddenFor(m => m.Id) @Html.LabelFor(m => m.Name) @Html.EditorFor(m => m.Name) <a href="#" class="deleteStudent" data-action="@Model.Id">Delete</a> </div> } 调节器 public class SchoolController : Controller { // GET: School public ActionResult Index() { var newSchool = new School(); return View(newSchool); } public ActionResult AddNewStudent() { var student = new Student(); return PartialView("_Student",student); } [HttpPost,ActionName("DeleteStudent")] public ActionResult DeleteStudent(School school) { foreach(var student in school.students.Where(s => !s.isDeleted)) { return View(school.students); } return View(); } } 解决方法
首先.live()在jquery-1.7中折旧并在1.9中删除.请改用.on().接下来,通过为“删除”链接生成重复的id属性来生成无效的html,这也意味着您将只能删除第一个项目,并且您永远无法删除新添加的项目,因为您没有使用事件委派.另请注意,BeginCollectionItem不会_自动生成模型ID_.它所做的只是在属性名称中添加一个前缀,其中包含一个基于guid的索引器值,以便可以在回发时将项绑定到一个集合.
部分partial中的链接需要一个类名,并且应该存储Id值,以便在脚本中轻松访问它. @using (Html.BeginCollectionItem("students")) { <div id="studentRow"> @Html.HiddenFor(m => m.Id) @Html.HiddenFor(m => m.isDeleted) // not sure what the point of the data- attribute is @Html.LabelFor(m => m.Name) @Html.EditorFor(m => m.Name) <a href="#" class="deleteStudent" data-id="@Model.Id">Delete</a> </div> } 然后你的脚本需要(注意封闭< div>的id =“newStudent”令人困惑,因为你foreach循环正在为现有项生成html) $('#newStudent').on('click',function() { // use event delegation var id = $(this).data('id'); if (id == 0) { // assumes property Id is typeof int // Its a new item so just remove from the DOM $(this).closest('.studentRow').remove(); } else { // Its an existing item so call controller to delete it from the database var url = '@Url.Action(""DeleteStudent","School")'; $.post(url,function(response) { if(response) { // The student was successfully deleted $(this).closest('.studentRow').remove(); } }).fail(function (response) { // Oops,something went wrong - display error message? }); } }); 和控制器 [HttpPost] public JsonResult DeleteStudent(int ID) { // delete the student from the database based on the ID and signal success return Json(true); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 启用Application Insights会使Web应用程序挂起
- asp.net – 使用FormsAuthentication持久的cookie超时
- 剃刀 – Asp.net Core如何呈现视图
- asp.net – 使用redirectMode =“ResponseRewrite”的custo
- asp.net – 如何在标记后继续内联任何标记
- asp.net – WCF请求处理线程敏捷吗?
- asp.net – 绕过Windows身份验证
- asp.net – 为什么我需要PUT或DELETE Http Verbs?
- asp.net-mvc-3 – 可以重定向到新页面的Ajax.BeginForm
- asp.net – 仅允许匿名用户通过web.config授权
推荐文章
站长推荐
- asp.net-mvc – “一个MVC过滤器提供程序已经注册
- asp.net – WebResource.axd空白或找不到
- asp.net-mvc – 如何为ASP.NET 4.5 Web API创建M
- asp.net-mvc – 允许操作和视图和模型的高度变化
- asp.net-mvc – 验证在部分视图中不起作用
- asp.net-mvc – 如何在MVC4中显示Byte []作为图片
- asp.net – 如何将HTML片段(作为委托?)传递给声
- ASP.NET和Web Tools 2012.2引用LESS文件
- asp.net – maxAllowedContentLength不适用于IHt
- asp.net-mvc – asp.net MVC:禁用一个TextBox
热点阅读