根据url中的ID加载视图中的数据(asp.net mvc)

时间:2014-08-28 22:48:30

标签: c# asp.net-mvc url controller

我一直在寻找一种基于URL中的ID或名称从数据库加载不同数据的方法。

例如:

这是视图的链接:

http://localhost:50830/CreateSale/Order

现在我想要这样的事情:

http://localhost:50830/CreateSale/Order/5
OR
http://localhost:50830/CreateSale/Order/Cookies

然后,基于ID(5)或名称(Cookies),控制器CreateSale将加载链接到Order视图中的ID /名称的数据。每个ID /名称的数据都不同。

修改

基本上我想要的是一种创建URL的方法,就像我展示的那样。因此,当我在浏览器中键入链​​接时,根据最后一部分(5或Cookie),它应该在页面上显示所需的数据。

例如:

如果链接是:

http://localhost:50830/CreateSale/Order/Cookies

然后我想查看有关在页面上订购Cookie的数据。

当链接是:

http://localhost:50830/CreateSale/Order/Toys

然后我想查看有关在页面上订购玩具的数据。

有没有办法在asp.net mvc4中执行此操作?

谢谢!

1 个答案:

答案 0 :(得分:1)

这应该是开箱即用的默认路由。在控制器方法上读取Id并将其传递给从数据库读取的方法,然后将结果传递回视图。

public ActionResult Order(string id)
{
    var data = DbLoader.Execute(id);
    return View(data);
}

在您的视图中,读取您传递给它的数据。 e,g在Index.cshtml。

@foreach (var dataItem in Model)
{
    //Display something
}

这假设您没有“CreateSale / Orders”的自定义路由,并使用默认路由:

routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

如果你有“/ CreateSale / Order”的自定义路线,请确保网址以“/ {id}”结尾,就像默认路线一样。

修改

要生成网址,请在视图或控制器中使用Url.Action方法。 E.g

@Url.Action("Order", "CreateSale", new RouteValueDictionary { { "id","5" } }, Request.Url.Scheme, Request.Url.Host) //generates http://localhost:50830/CreateSale/Order/5

@Url.Action("Order", "CreateSale", new RouteValueDictionary { { "id","Cookies" } }, Request.Url.Scheme, Request.Url.Host) //generates http://localhost:50830/CreateSale/Order/Cookies

@Url.Action("Order", "CreateSale", new RouteValueDictionary { { "id","Toys" } }, Request.Url.Scheme, Request.Url.Host) //generates http://localhost/CreateSale/Order/Toys