【问题标题】:MVC5 One Click Delete from Details PageMVC5 从详细信息页面一键删除
【发布时间】:2015-03-30 02:56:20
【问题描述】:

我从 VS MVC 5 可以创建的脚手架开始,它工作正常,但我希望能够从详细信息页面中删除记录(在本例中为“采访”)。

我首先将删除页面上删除按钮的标记复制到详细信息,但它只会重定向到详细信息操作。如何在详细信息页面上获得一个按钮来运行 DeleteConfirmed 方法?

这是来自控制器的相关代码:

public ActionResult Details(int? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    Interview interview = db.Interviews.Find(id);
    if (interview == null)
    {
        return HttpNotFound();
    }
    return View(interview);
}

[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
    Interview interview = db.Interviews.Find(id);
    db.Interviews.Remove(interview);
    db.SaveChanges();
    return RedirectToAction("Index");
}

public ActionResult Delete(int? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    Interview interview = db.Interviews.Find(id);
    if (interview == null)
    {
        return HttpNotFound();
    }
    return View(interview);
}

这是我从删除页面复制并放入详细信息视图的标记:

@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    <div class="form-actions no-color">
        <input type="submit" value="Delete" class="btn btn-danger" />
    </div>
}

这是我让它工作所需的标记:

@using (Html.BeginForm("Delete", "Interviews", new { id = Model.ID })) {
    @Html.AntiForgeryToken()
    <div class="form-actions no-color">
        <input type="submit" value="Delete" class="btn btn-danger" />
    </div>
}

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-5


    【解决方案1】:

    您需要发布到DeleteConfirm 操作。在这里,您发布到Details 操作,因为您只使用Html.BeginForm()。你需要:

    @using (Html.BeginForm("Delete", new { id = Model.Id })) {
    

    【讨论】:

    • 虽然这确实发布到 Delete 操作(DeleteConfirmed 的别名),但它不会发布任何数据,因此 id 将为空...
    • 对。我没有注意表格的实际内容。该代码在 Delete 视图中有效,因为它只是对已包含 id 的删除 URL 的回发。由于您明确指定要发布到此处的 URL,因此需要包含 id。或者,您也可以在表单中使用带有 id 的隐藏输入。无论哪种方式都可以。
    • 谢谢你,这有效。该方法的签名还需要包含控制器名称,但你大部分都让我明白了。我将使用最终标记更新我的帖子。
    【解决方案2】:

    您可以通过 javascript 对像这样的 onclickling 方法进行删除确认

    //change input type to button to prevent form submit
    <input **type="button"** onClick="deleteConfirm" value="Delete" class="btn btn-danger" />
    function deleteConfirm()
    {
     $.ajax({
      url: "DeleteConfirmed Action Url",
      type:"post", 
      data:{id:} 
      success: function(response) {
        //check your server side result
      }
    });
    }
    

    【讨论】:

    • deleteConfirm 是一种服务器端操作方法,而不是 javascript。
    • 您可以通过ajax调用来调用您的服务器端操作并将结果发送给客户端
    • 但这就是发帖人想知道的……你在掩饰问题的重点。
    • 更近一点,但是那个 url 肯定是无效的......如果你不知道如何做 MVC ajax,你可能应该删除你的答案来让你的代表回来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2012-03-25
    • 2017-05-17
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多