asp.net mvc4一个动作的两个不同视图

时间:2016-01-30 09:37:28

标签: c# asp.net asp.net-mvc asp.net-mvc-4

对于Kaminy / KaminniTopky& amp;我需要两个不同的视图Kaminy / KaminniTopky / 5。 我怎么能这样做呢?

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

1 个答案:

答案 0 :(得分:1)

@Stephen Muecke的想法很有价值,你可以结合起来:

public ActionResult KaminniTopky(int? id)
{
   if (!id.HasValue)
   {
      return View();
   }
   else
   {
      return View("OtherViewName");
   }
}

还有一些重载也会占用模型 - return View(someModel);return View("OtherViewName", someModel);

MVC 5 中你可以:

[Route("Kaminy/KaminniTopky")] 
public ActionResult KaminniTopky()
{
    return View();
}

[Route("Kaminy/KaminniTopky/{id}")] 
public ActionResult KaminniTopky(int id)
{
    return View("OtherViewName");
}

对于像/Kaminy/KaminniTopky/KaminniTopkyWithOther/5这样的东西,你会使用路由而不是奇怪的控制器结构来支持其他样式的URL。

E.g。在RouteConfig

routes.MapRoute(
            "SomeRoute",
            "/Kaminy/KaminniTopky/KaminniTopkyWithOther/{id}",
            new { controller = "Kaminy", action = "KaminniTopkyWithOther", id = "" }
        );

确保它出现在默认路线之前。

然后,只要与路径中定义的操作相同,您的操作被调用无关紧要。

public ActionResult KaminniTopkyWithOther(int id)
{
    return View("OtherViewName");
}