還是ASP MVC開發的新手段。 假設我有一個MusicController,它有2個視圖:List(顯示所有藝術家列表)和Highlights(顯示3個特定專輯的所有細節)。ASP MVC結合視圖
我現在想在一個頁面上呈現兩個視圖。 1)什麼是最好的方法來做到這一點?部分視圖?我是否需要爲顯示兩個部分視圖的頁面創建單獨的控制器? 2)假設我想根據所選藝術家更改高光。如何將該參數傳遞給帶有高亮的局部視圖?
謝謝你給我一些線索!
還是ASP MVC開發的新手段。 假設我有一個MusicController,它有2個視圖:List(顯示所有藝術家列表)和Highlights(顯示3個特定專輯的所有細節)。ASP MVC結合視圖
我現在想在一個頁面上呈現兩個視圖。 1)什麼是最好的方法來做到這一點?部分視圖?我是否需要爲顯示兩個部分視圖的頁面創建單獨的控制器? 2)假設我想根據所選藝術家更改高光。如何將該參數傳遞給帶有高亮的局部視圖?
謝謝你給我一些線索!
部分意見的確是你想要什麼叫精彩集錦操作方法。您可能遇到的一點麻煩是,有時很難製作出既能獨立運行又能嵌入另一視圖中的局部視圖。解決方案是創建一個單獨的視圖,其中包含所有必要的樣板,然後調用(單個)局部視圖。然後,部分視圖適用於單個頁面和組合頁面。
您的聚合視圖不需要單獨的控制器,但它需要自己的操作。
因此,這裏是我崇尚的結構:
在MusicController
:
public ActionResult List() {
return View();
}
public ActionResult Highlights() {
return View();
}
public ActionResult ListAndHighlights() {
return View();
}
的List
和Highlights
的意見將是這個樣子:
<div class="anyNecessaryChrome">
@RenderPartial("ListPartial")
</div>
而且ListAndHighlights()
會看像這樣:
<div class="listChrome">
@RenderPartial("ListPartial")
</div>
<div class="highlightsChrome">
@RenderPartial("HighlightsPartial")
</div>
如果您希望部分視圖響應客戶端上的某些內容進行更新,則必須使用AJAX。
看一看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
});
});
您可以創建這樣的視圖模型存儲相冊
而在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);
});
});