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

标签 c# asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing attributerouting

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

我在 ModelController.cs

中有一个这样的 Controller 操作
//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);
}

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

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

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

我使用的 View 只是标准 View ,这可以实现吗,还是我需要开始研究局部 View 或区域 View ?

提前致谢

最佳答案

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

在这种情况下,您的路线需要一个 vehicleMake 参数。我不确定如何将您的 vehicleMake 类型转换为可用于您的路线的字符串,因此我在此示例中仅显示 ToString

return RedirectToRoute("NiceUrlForVehicleMakeLookup", new { vehicleMake = vehicleMake.ToString() });

关于c# - 如何在 MVC5 中使用自定义属性路由重定向到路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29022582/

相关文章:

c# - ListView.ItemContainerStyle IsSelected 属性似乎不影响 WinRT 上的选择

c# - 退出时设置当前工作目录 (.NET Core)

asp.net - 在一个Web应用程序中结合经典的ASP.NET和ASP.NET MVC

jquery - 交换导航栏 div 类的动画 jQuery 方法

asp.net-mvc - MVC 区域的后备路线

c# - 在 Controller asp.net mvc 5 的 View 上显示错误消息

c# - Metro风格的应用UI设计: Pages vs Scenarios

c# - DataGrid.Resources 可以在代码后面设置吗?

asp.net-mvc - 最佳实践错误处理ASP.Net MVC

asp.net-mvc - asp.net mvc 主细节