2012-05-23 60 views
0

還是ASP MVC開發的新手段。 假設我有一個MusicController,它有2個視圖:List(顯示所有藝術家列表)和Highlights(顯示3個特定專輯的所有細節)。ASP MVC結合視圖

我現在想在一個頁面上呈現兩個視圖。 1)什麼是最好的方法來做到這一點?部分視圖?我是否需要爲顯示兩個部分視圖的頁面創建單獨的控制器? 2)假設我想根據所選藝術家更改高光。如何將該參數傳遞給帶有高亮的局部視圖?

謝謝你給我一些線索!

回答

4

部分意見的確是你想要什麼叫精彩集錦操作方法。您可能遇到的一點麻煩是,有時很難製作出既能獨立運行又能嵌入另一視圖中的局部視圖。解決方案是創建一個單獨的視圖,其中包含所有必要的樣板,然後調用(單個)局部視圖。然後,部分視圖適用於單個頁面和組合頁面。

您的聚合視圖不需要單獨的控制器,但它需要自己的操作。

因此,這裏是我崇尚的結構:

MusicController

public ActionResult List() { 
    return View(); 
} 
public ActionResult Highlights() { 
    return View(); 
} 
public ActionResult ListAndHighlights() { 
    return View(); 
} 

ListHighlights的意見將是這個樣子:

<div class="anyNecessaryChrome"> 
    @RenderPartial("ListPartial") 
</div> 

而且ListAndHighlights()會看像這樣:

<div class="listChrome"> 
    @RenderPartial("ListPartial") 
</div> 
<div class="highlightsChrome"> 
    @RenderPartial("HighlightsPartial") 
</div> 

如果您希望部分視圖響應客戶端上的某些內容進行更新,則必須使用AJAX。

1

看一看Html.RenderAction() and Html.RenderPartial()

或者我會藝術家爲查看列表,並加載使用AJAX的亮點。

對於你只需要2操作方法

public class ArtistsController { 
    public ActionResult Index() { 
     return View(); 
    } 
} 

public class AlbumsController { 
    [HttpGet] 
    public JSONResult GetHighlights(int artistId) { 
     return JSON(Albums.GetHighlights(artistId), JsonRequestBehavior.AllowGet); 
    } 
} 

和一些示例HTML

<ul id="artists"> 
    <li><a href="#" data-artist-id="1">Michael Jackson</a></li> 
    <li><a href="#" data-artist-id="2">Tom Jones</a></li> 
</ul> 

然後你可以使用jQuery的$.get

$("#artists a").click(function(e) { 
    var id = $(this).data("artist-id"); 
    $.get("/Albums/GetHighlights/" + id, function(data) { 
     // Populate highlights section with data from server 
    }); 
}); 
0

您可以創建這樣的視圖模型存儲相冊

​​

而在Controlller的藝術家名單和列表,寫的GET視圖的操作方法。因爲獲取所有藝術家和獲取專輯屬於第一位藝術家。 (你可以根據你的要求改變這種)

public ActionResult ArtistsWithHighLights() 
{ 
    List<ArtistWithHighlights> allArtists=new List<ArtistWithHighlights>(); 
    allArtists=GetAllArtists(); 

    //If we have atlease one artist in the list, Load the albums for the first one only 
    if(allArtists.Count>0) 
    { 
    allArtists[0].Albums=GetAlbumsForArtist(allArtists[0].Artist.ArtistID); 
    }  
    return View(allArtists);  
} 

和強類型的觀點是這樣的

@model List<ArtistWithHighlights> 

@foreach(var artist in Model) 
{ 
    <a id="@artist.ID" class="artistName">@artist.Name</p> 
} 
<div id="albums"> 
    <h3>Highlighted Albums</h3> 
    @foreach(var album in Model[0].Albums) 
    { 
    <p>@album.Name</p> 
    } 
</div> 

爲了得到另一位藝術家的專輯上選擇(點擊事件),可以使ajax調用另一個Action方法,該方法返回傳遞的藝術家ID的專輯列表,然後您可以在div中顯示該列表。

$(function(){ 
$(".artistName").click(function(e){ 
    e.preventDefault(); 
    var artistId=$(this.attr("id"); 
    $("#albums").load("../Albums/"+artistId); 
    }); 
});