如果我理解正确的,你有一个单一的查看您想要在一个分部视图中显示资产列表的位置,以及在选定时编辑资产的另一个分部视图。
首先你应该创建两个部分视图。
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.RenderPartial
的Assets.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")
您可以用哪一个最适合你的。
很感谢。只是想知道资产局部视图如何获取其数据,它是否在控制器上拥有自己的操作方法。 [这个问题](http://stackoverflow.com/questions/1371031/asp-net-mvc-partial-view-controller-action)。建议索引具有列表并将其传递给partial,在这种情况下,index视图需要与资产列表强制类型化。这是最好的方法吗? –
对不起,我错过了这么说。尽管我更新了我的答案。 – VJAI