如何在MVC5中使用自定义属性路由重定向到路由

Chr*_*ris 7 c# asp.net-mvc asp.net-mvc-routing attributerouting asp.net-mvc-5

我不确定我尝试做的是否有效,因为我是C#/ ASP.NET/MVC堆栈的相对新手.

我在ModelController.cs中有这样的控制器动作

//Get
[Route("{vehiclemake}/models", Name = "NiceUrlForVehicleMakeLookup")]
public async Task<ActionResult> Index(string vehicleMake)
{
    // Code removed for readaility

    models = await db.VehicleModels.Where(make => make.VehicleMake.Make == vehicleMake).ToListAsync();

    return View(models);
}
Run Code Online (Sandbox Code Playgroud)

在另一个名为VehicleMakeController.cs的控制器中,我有以下内容:

[HttpPost]
[Route("VehicleMake/AddNiceName/{makeId}")]
public ActionResult AddNiceName(VehicleMake vehicleMake, int? makeId)
{
    if (ModelState.IsValid)
    {
        var vehicle = db.VehicleMakes.Find(makeId);
        vehicle.MakeNiceName = vehicleMake.MakeNiceName;
        db.SaveChanges();
        return RedirectToRoute("NiceUrlForVehicleMakeLookup");
    }
    VehicleMake make = vehicleMake;
    return View(make);
}
Run Code Online (Sandbox Code Playgroud)

我想做的是,当数据库更新成功时,我正在返回的地方,重定向到我定义的自定义路由(此部分: 返回RedirectToRoute("NiceUrlForVehicleMakeLookup");)

我正在使用的观点只是标准观点,这可以实现,还是我需要开始研究部分或区域?

提前致谢

Nig*_*888 8

指定路径名称并不自动意味着提供了路径值.您仍然需要手动提供它们以使路由与请求匹配.

在这种情况下,您的路线需要vehicleMake参数.我不确定你将如何将你的vehicleMake类型转换为可以与你的路线一起使用的字符串,所以我只是ToString在这个例子中展示.

return RedirectToRoute("NiceUrlForVehicleMakeLookup", new { vehicleMake = vehicleMake.ToString() });
Run Code Online (Sandbox Code Playgroud)