ilija veselica
ilija veselica

Reputation: 9574

asp.net mvc2 - two (or more) views using same controller?

Is it possible that two different views use the same controller? I have very complex controller that displays some data. Now I need to display this data (which is retrieved using ajax) in two partial views because I want to place them on different positions in layout.

Upvotes: 0

Views: 2056

Answers (2)

Ahmad
Ahmad

Reputation: 24827

Based on my understanding so far, you want one controller action to return two views. I somehow think that this is not possible.

You have mentioned that the views are used to display identical data is different ways. My suggestion would to return a JsonResult from the controller action and build the view client side.

Upvotes: 0

Matthew Abbott
Matthew Abbott

Reputation: 61589

the View() function can be passed arguments, for instance:

return View(); // The view with the same name as the action.
return View("MyView") // The view named "MyView"

There are a few more overloads too. Does this fit the bill?

If not, why not partial views, for instance, given this model:

public class BlogItem
{
    public string Title { get; set; }
    public int Id { get; set; }
}

And this action:

public ActionResult Index()
{
    var items = new List<BlogItem>
                {
                    new BlogItem { Title = "Test Blog Item", Id = 1 }
                };
    return View(items);
}

And this view:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<List<BlogItem>>" %>
<asp:Content ContentPlaceHolderID="MainContent" runat="server">
    <% Html.RenderPartial("List", Model); %>

    <% Html.RenderPartial("Icon", Model); %>
</asp:Content>

I can have two partial views using the same model:

List:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<BlogItem>" %>
<ul>
    <% foreach (var item in Model) { %>
        <li><%= item.Title %></li>
    <% } %>
</ul>

Icon:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<BlogItem>" %>
<div>
    <% foreach (var item in Model) { %>
        <div class="icon"><img src="..." /></div>
        <div class="text"><%= item.Title %></div>
    <% } %>
</div>

Would that work?

Upvotes: 2

Related Questions