我一直在寻找一种基于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中执行此操作?
谢谢!
答案 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