我目前有一个产品控制器,每个产品都有一个硬编码的“产品”动作结果(因为产品是固定的,不会改变):
site.com/Products/Product
site.com/nl/Products/Product
这会导致每个产品包含所有信息的单个页面。 现在,我想为每个产品创建多个页面,以突出显示某些功能或选项,而不是显示单个产品页面。
e.g:
site.com/nl/Products/Product/Detail1
site.com/nl/Products/Product/Option2
site.com/nl/Products/Product/Option16
最好的方法是什么?
我应该创建例如ProductDetail1动作和ProductOption2动作?
答案 0 :(得分:1)
您可以在一个操作中响应不同的视图
public class ProductsController : Controller
{
public ActionResult Product(int id, string view,)
{
Product prod = Context.GetProduct(id);
if(!string.IsNullOrEmpty(view))
{
switch(view.ToLower()){
case "detail": return View("Detail", prod.Detail);
case "option1": return View("Option1", prod.GetOption(1));
case "option2": return View("Option2", prod.GetOption(2));
}
}
return View();
}
}
答案 1 :(得分:0)
你有控制器方法:
public class ProductsController : Controller
{
public ActionResult Product(string option)
{
//here your logic
return View();
}
}
您可以更改默认路线:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{option}",
defaults: new { controller = "Home", action = "Index", option = UrlParameter.Optional }
);
现在,如果您在控制器中调用site.com/nl/Products/Product/Detail1
option
对象等网址,则其值为Detail1
。你可以用这个参数做任何你想做的事。