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
热点阅读
