如何从MVC中的一个Controller加载两个视图

时间:2015-03-30 16:24:09

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我有两个Html链接 <a href="@Html.ActionLink("advetisement","sample")"></a>和  <a href="@Html.ActionLink("advetisement1","sample")"></a>  当我点击First Link时,它会转到Sample控制器并转到advetisement Methode并返回View public ActionResult advetisement{ // here iam reciveing data to variable return view() }现在它返回查看并且数据被绑定并显示Page.Now当我点击第二个链接它应该转到相同的控制器(advetisement)并返回相同的数据但视图应该是不同的,因为html样式已更改。

2 个答案:

答案 0 :(得分:5)

您可以从同一控制器操作加载两个不同的视图:

if (model.SomeCondition == true)
{
   return View("ViewName1", model);
}
return View("ViewName2", model);

然后使用视图模型存储确定要显示的视图的条件:

public class MyViewModel
{
    public bool SomeCondition  { get; set;}
    public object Data { get; set; }
}

答案 1 :(得分:0)

我认为最简单的方法就是让两个动作有不同的名字。当然,应该将代码重复提取到单独的方法中。像这样:

    public ActionResult Advertisement()
    {
        return AdvertisementInternal("Advertisement");
    }

    public ActionResult Advertisement1()
    {
        return AdvertisementInternal("Advertisement1");
    }

    private ActionResult AdvertisementInternal(string viewName)
    {
        // filling ViewBag with your data or creating your view model
        ...
        return View(viewName);
    }

但是如果一种适当的方式是两种视图的唯一操作,那么你应该有一个标志来区分视图。它可以添加到URL。像这样:

    // on the view
    @Html.ActionLink("Link1", "Advertisement", "Sample", new { Id = "View1" }, null)
    @Html.ActionLink("Link2", "Advertisement", "Sample", new { Id = "View2" }, null)

    // in the controller
    public ActionResult Advertisement(string id)
    {
        if (id == "View1" || id == "View2")
        {
            // filling ViewBag with your data or creating your view model
            ...
            return View(id);
        }
        return HttpNotFound();
    }