C# asp.net mvc4一个操作有两个不同的视图
我需要对Kaminy/Kaminitopky和Kaminy/Kaminitopky/5有两种不同的看法。 我怎么能那样做呢C# asp.net mvc4一个操作有两个不同的视图,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我需要对Kaminy/Kaminitopky和Kaminy/Kaminitopky/5有两种不同的看法。 我怎么能那样做呢 public class KaminyController : Controller { // // GET: /Kaminy/ public ActionResult Index() { return View(); } // GET: /Kaminy/KaminniTopky public Act
public class KaminyController : Controller
{
//
// GET: /Kaminy/
public ActionResult Index()
{
return View();
}
// GET: /Kaminy/KaminniTopky
public ActionResult KaminniTopky()
{
return View();
}
// GET: /Kaminy/KaminniTopky/5
public ActionResult KaminniTopky(int id)
{
return View();
}
}
@Stephen Muecke的想法有其优点,您可以将其组合为:
public ActionResult KaminniTopky(int? id)
{
if (!id.HasValue)
{
return View();
}
else
{
return View("OtherViewName");
}
}
还有一些重载也会占用模型-返回视图(someModel)代码>和返回视图(“其他视图名称”,someModel)代码>分别为
在MVC 5中,您可以:
[Route("Kaminy/KaminniTopky")]
public ActionResult KaminniTopky()
{
return View();
}
[Route("Kaminy/KaminniTopky/{id}")]
public ActionResult KaminniTopky(int id)
{
return View("OtherViewName");
}
对于/kaminny/kaminitopky/kaminitopky with other/5
之类的东西,您可以使用路由而不是奇怪的控制器结构来支持其他样式的URL
例如,在RouteConfig
中:
routes.MapRoute(
"SomeRoute",
"/Kaminy/KaminniTopky/KaminniTopkyWithOther/{id}",
new { controller = "Kaminy", action = "KaminniTopkyWithOther", id = "" }
);
确保这在默认路由之前
那么,调用什么动作并不重要,只要它与路由中定义的相同
public ActionResult KaminniTopkyWithOther(int id)
{
return View("OtherViewName");
}
您只需要一个带有可空参数的方法public ActionResult-kaminitopky(int?id)
,然后您就可以使用if(id.HasValue)
要确定要显示哪个视图,当用户尝试导航到第一个建议时,第一个建议将立即引发异常。现在,我觉得我偷了你的答案:-\n这就是我在没有咖啡的情况下堆叠时发生的情况!谢谢,我还有一个问题。如何创建支持此路径的控制器。例如:/Kaminy/kaminitopky/kaminitopky with other/5您需要将其添加到路由中,所以您的最后一个答案可以帮助我找到根问题的新解决方案:I did:routes.MapRoute(名称:“ShowKaminy”,url:“Kaminy/kaminitopky/{id}),默认值:new{controller=“Kaminy”,action=“Show”} ); 和外接程序Kaminy controller:public ActionResult Show(int id){return View();},现在这个URL是有效的:Kaminy/kaminitopky/2