0

我有一个应用程序,它根据表中的“名称”列标题显示数据,该表在路由配置中声明为 id:

{controller}/{action}/{name}
defaults: new { controller = "Home", action = "Job", name = UrlParameter.Optional }

该名称不是主键,因为页面将根据查询字符串显示具有相同名称的多行。应用程序运行良好,CRUD 功能正常工作。我唯一的问题是从“编辑”或“删除”页面发布后将用户重定向到显示页面,因为我想将用户返回到显示具有相同“名称”的数据行的页面,但我似乎只能访问 ID,(主键)这不是我想要的

例如:

本地主机:8888/Home/Job/乔纳森

Jonathan | Column2 | Column3
Jonathan | Column2 | Column3
Jonathan | Column2 | Column3
Jonathan | Column2 | Column3

编辑或删除一行时,URL 将是:/Home/edit?id=48,我试图弄清楚如何根据“ID”获取“名称”列字段(在控制器内) ”,并在发布后将用户返回到 URL 中具有该“名称”的页面。

对于后退按钮,在视图中执行此操作非常简单:

@{
    var name= Model.Name;
}

<a href="../home/job/@name" class="cancel">Cancel</a>

但是在发布表单时我似乎无法弄清楚路由

4

1 回答 1

0

我已经弄清楚了,通过将“名称”也传递给查询字符串,使用 Html.ActionLink,您可以访问 URL 中的“名称”以与控制器一起使用。

关联:

@Html.ActionLink("Edit", "edit", new { id=item.id, name=item.Name})

控制器:

    [HttpPost]
    public ActionResult Edit(Table1 table1)
    {
        var query = RouteData.Values["name"];

        var back = "../job/" + query;

        if (ModelState.IsValid)
        {
            _db.Entry(table1).State = System.Data.EntityState.Modified;
            _db.SaveChanges();
            return RedirectPermanent(back);
        }

        return View(table1);
    }
于 2013-02-19T13:31:42.207 回答