2012-06-29 51 views
4

我是這個asp網絡mvc的新手,但在網頁表單中有很強的背景。如何在一個視圖中呈現強類型的局部視圖?

我想實現一個頁面,其左側有一個資產菜單,當您點擊其中一個資產時,該資產的詳細信息可以在右側進行編輯。

現在我想我需要使用2個強類型的部分視圖。 1爲資產列表類型的左側菜單,1爲資產類型的右側面板。

我左側菜單工作至今

控制器

public class AssetsController : Controller 
{ 
    // 
    // GET: /Assets/ 
    public ActionResult Index() 
    { 
     var assets =Repo.getAssetList(); 

     return View(assets); 
    } 

} 

佈局視圖

@model IList<CasWebSite.Models.Asset> 

<!DOCTYPE html> 
<html> 
<head> 
    <title>title</title> 
</head> 
<body> 
    <h1> 
     Assets</h1> 


    @RenderBody() 

</body> 
</html> 

索引視圖

@model IList<CasWebSite.Models.Asset> 
@{ 
    Layout = "_Layout.cshtml"; 
} 
<ul> 
    @foreach (var asset in Model) 
    { 
     <li>@asset.Name </li> 
    } 
</ul> 

那麼,如何添加在其他觀點我克瑞亞對資產類型的新的部分視圖,控制器看起來像什麼,我仍然通過轉到url /資產轉到頁面,以及如何在2個部分視圖之間傳遞值,因爲我需要知道選擇了哪個資產在左側進行編輯?

感謝

回答

8

如果我理解正確的,你有一個單一的查看您想要在一個分部視圖中顯示資產列表的位置,以及在選定時編輯資產的另一個分部視圖。

首先你應該創建兩個部分視圖。

Assets.cshtml(部分圖)

@model IList<Models.Asset> 

.. iterate the model and display the menu of assets 

EditAsset.cshtml(部分圖)

@model Models.Asset 

.. create the form and render the fields for editing 

現在在主視圖Index.cshtml您在使用Html.Partial/Html.RenderPartialAssets.cshtml調用而另一個則在點擊資產鏈接時被調用。

索引。CSHTML

@Html.Partial("Assets", Model.Assets) @*rendering the partial view*@ 

... other html 

<div id="editAssetContainer"> @*edit form placeholder*@ 
</div> 

注意,你也應該有一個叫editAssetContainer佔位符,你要去哪裏,以顯示編輯表單。

現在,待處理的事情是如何在佔位符中單擊資源鏈接來呈現編輯表單。你可以通過兩種方式做到這一點:直接使用jQuery或使用Ajax.ActionLink。您可以在Asset.cshtml局部視圖中創建所有資產鏈接作爲ajax鏈接。 )如果您使用的是Ajax.ActionLink,請不要忘記包含不顯眼的ajax庫)

Ex。 Ajax.ActionLink

@Ajax.ActionLink(linkText, 
"EditAsset", // the action that returns the partial view 
new {assetId = @asset.Id }, // the assetId that to be passed to the action 
new AjaxOptions // you can specify the targetid and others here.. 
    { UpdateTargetId = "editAssetContainer", 
     InsertionMode = InsertionMode.Replace 
    } 
) 

在這兩種情況下,你需要在返回EditAsset.cshtml控制器的動作。

public PartialViewResult EditAsset(int assetId) 
{ 
    var asset = .. get asset using assetId from db. 
    return PartialView(asset); 
} 

UPDATE:

有兩種方法可以將模型加載到Assets.cshtml局部視圖。第一種方法是創建一個包含資產列表作爲屬性的視圖模型,並用此視圖模型強制鍵入index視圖。然後您可以撥打Html.Partial將資產傳遞給它。

Ex。

public class IndexViewModel 
{ 
    public IList<Asset> Assets; 
    .. other properties if there any 
} 

Index.cshtml

@model IndexViewModel 

@Html.Partial("Assets", Model.Assets). 

第二的aproach是你可以有一個孩子的行動,獲得資產的從數據庫列表,並返回局部視圖。在這種情況下,您不需要強行鍵入Index視圖。

[ChildActionOnly] 
public PartialViewResult Assets() 
{ 
    var assets = .. get from db 
    return View(assets); 
} 

您甚至可以從Index孩子行動

@Html.Action("Assets") 

您可以用哪一個最適合你的。

+0

很感謝。只是想知道資產局部視圖如何獲取其數據,它是否在控制器上擁有自己的操作方法。 [這個問題](http://stackoverflow.com/questions/1371031/asp-net-mvc-partial-view-controller-action)。建議索引具有列表並將其傳遞給partial,在這種情況下,index視圖需要與資產列表強制類型化。這是最好的方法嗎? –

+1

對不起,我錯過了這麼說。儘管我更新了我的答案。 – VJAI

相關問題