从数据库中删除带有参数的项

时间:2019-04-05 14:17:22

标签: c# asp.net asp.net-mvc

我对于使用参数从数据库(SQLServer)删除项目有一些问题。我想在Index()中按“删除”引用,然后将名称参数放在Delete()中,并再次将操作重定向到Index()并显示db的内容。当我按“删除”引用时,除了Index():(

    public async Task<IActionResult> Delete(string nm)
        {
            IQueryable<Phone> users = db.Phones;

            if (!String.IsNullOrEmpty(nm))
            {
                users = users.Where(p => p.Name.Contains(nm));

                 foreach (var item in users)
                 {
                     db.Phones.Remove(item);

                 }

                 await db.SaveChangesAsync();

            }
            return RedirectToAction("Index");
        }


    @model DataApp2.Models.Phone
@{
    ViewBag.Title = "Delete";
 }


    <form method="get">
        <div class="form-inline form-group">
            <label class="control-label">Name: </label>
            @Html.TextBox("nm", Model.Name, htmlAttributes: new { @class = "form-control" })          
            <input type="submit" value="Delete" class="btn btn-default" />
        </div>
    </form>

1 个答案:

答案 0 :(得分:1)

您自己构建输入并使用表单有点过大/过于复杂。相反,您可以利用.NET MVC框架将请求发送到您的操作  通过将您发布的表格及其中的所有内容替换为:

@Html.ActionLink("Delete", "Delete", new { nm = Model.Name })

这将生成带有文本“ Delete”(<a>的第一个参数)的链接(ActionLink标签),并将Model.Name发送到名为{{1}的数据字段中}更改为控制器中的nm操作(Delete的第二个参数)。

我整理了一个概念证明,证明它可行:

查看:

ActionLink

控制器操作:

@Html.ActionLink("Delete", "Delete", new { nm = "hi" })

在此示例中,控制器已成功设置 public ActionResult Delete(string nm) { if (!String.IsNullOrEmpty(nm)) { ViewBag.Name = nm; } return RedirectToAction("Index"); } 。请注意,就您遇到的问题而言,我在这里返回ViewBag.Name而不是您返回的ActionResult没什么区别。

我猜测您没有在最初加载页面的操作中填充async Task<IActionResult>。如果您需要更多信息,请发布用于加载视图的get操作的代码。您可以坚持以下方法来检验该理论:

Model.Name

如果您不想通过调试器单步执行代码,则为