加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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来添加和删除行.

我遇到的一个问题是删除功能,我遵循了一个在线教程
使用#divId指定:first似乎表示每次删除第一行.这对我没有好处,对最终用户没有意义.

因为我正在使用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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读