根据MVC 4中URL的主键,从自定义ID返回路由

时间:2013-02-19 12:39:55

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

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

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

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

例如:

本地主机:8888 /主页/工作/乔纳森

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

当编辑或删除一行时,URL将是:/ Home / edit?id = 48,我试图找出如何获得“名称”列字段(在控制器内),基于所选行的“ID”,并在发布后将用户返回到URL中具有“名称”的页面。

在View中进行后退按钮非常简单:

@{
    var name= Model.Name;
}

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

但是,在发布表单

时,我似乎无法弄清楚路由

1 个答案:

答案 0 :(得分:0)

我已经想通了,通过将“Name”传递给查询字符串,使用Html.ActionLink,然后您可以访问URL中的“Name”以与控制器一起使用。

链接:

@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);
    }