如果我理解正确,您有一个视图,您希望在一个局部视图和另一个局部视图中显示资产列表以在选择时编辑资产。
首先,您应该创建两个局部视图。
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
,您必须调用Assets.cshtml
usingHtml.Partial/Html.RenderPartial
而另一个将在单击资产链接时调用。
索引.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 库)
前任。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);
}
更新:
有两种方法可以将模型加载到Assets.cshtml
局部视图中。第一种方法是您可以创建一个包含资产列表作为属性的视图模型,并index
使用此视图模型强烈键入视图。然后你可以调用Html.Partial
将资产传递给它。
前任。
public class IndexViewModel
{
public IList<Asset> Assets;
.. other properties if there any
}
索引.cshtml
@model IndexViewModel
@Html.Partial("Assets", Model.Assets).
第二种方法是您可以有一个从数据库获取资产列表并返回部分视图的子操作。在这种情况下,您不需要强输入Index
视图。
[ChildActionOnly]
public PartialViewResult Assets()
{
var assets = .. get from db
return View(assets);
}
Index
您可以从as调用子操作
@Html.Action("Assets")
您可以使用最适合您的一种。