尝试从“详细信息”操作中删除记录

时间:2013-09-15 14:47:54

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我使用Index操作来显示网格结构中的记录列表。我还有一个删除按钮作为允许用户删除特定行/记录的列之一。这很好用。我还在每行中都有一个详细信息链接,以便查看单个记录。

删除有自己的HttpPost操作。细节也有自己的常规行动。

问题是我现在想要将此删除按钮代码添加到详细信息视图,但我使用通知程序并且删除本身有效,但代码显示通知程序(因为在详细信息中有记录== null检查行动)。我无法弄清楚如何解决这个问题。

以下是代码:

public ActionResult Index()
{
    ...
    var myList = _repository.Table;
    // Nothing else relevant just displays list and sets up model
    return View(model);
}

public ActionResult Details(int id)
{
    ...
    var record = _repository.Get(id);

    // If I use the Delete action below then this will get called and fire;
    // I am trying to figure out how to avoid it firing when I use the Delete code
    // in the Details view (see .cshtml code below)
    if (record == null)
    {
    _myServices.Notifier.Warning
            (T("Request not found, please check the URL."));

        return RedirectToAction("Index");
    }

    var model = new myViewModel();
    model.Id = record.Id;
    // Pulling other records, nothing special

    return View(model);
}

[HttpPost]
public ActionResult Delete(int id, string returnUrl)
{
    ...
    var item = _repository.Get(id);
    if (item == null)
    {
        _myServices.Notifier.Error(T("Inquiry not found."));
    }
    else
    {
        _myServices.Notifier.Information(T("Request deleted successfully."));
        _repository.Delete(item);
    }

    return this.RedirectLocal(returnUrl, "~/");
}

我想知道是否应该创建一个像DeleteDetails这样的单独操作,但是仍然会触发详细信息操作中的record = null检查。

以下是“索引”视图和“详细信息”视图中的删除代码:

@{using (Html.BeginForm("Delete", "MyAdmin", 
    new { area = "MyNameSpace" }, 
    FormMethod.Post, new { @class = "delete-form" }))
    {
        @Html.AntiForgeryTokenOrchard()
        @Html.Hidden("id", Model.Id)
        @Html.Hidden("returnUrl", Context.Request.ToUrlString())
        <input type="submit" value="Delete" />
    }
}

也许我应该更改详细信息视图删除代码?

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

因此,当您在Details视图中为Delete传递Context.Request.ToUrlString()时,您的returnUrl操作会重定向到您的Details操作。对于刚刚删除的记录,回到Details视图可能没有意义,因为你会遇到这样的错误。

如果从Index行动中Delete重定向回Details怎么样?只需将returnUrl中隐藏delete-form的值更改为Url.Action("Index")即可。鉴于当记录不存在时,Details操作将重定向到Index,在删除记录时执行此操作是有意义的。