MVC的新手,我无法理解所提出的类似问题的答案,所以如果这是人们的重复,请道歉。
我有一个使用角色模型的详细信息视图:
@model Attacker.Models.Character
@{
ViewBag.Title = "Details";
}
<h2>Details</h2>
<div>
<h4>Character</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.Name)
</dt>
<dd>
@Html.DisplayFor(model => model.Name)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Str)
</dt>
<dd>
@Html.DisplayFor(model => model.Str)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Con)
</dt>
<dd>
@Html.DisplayFor(model => model.Con)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Dex)
</dt>
<dd>
@Html.DisplayFor(model => model.Dex)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Int)
</dt>
<dd>
@Html.DisplayFor(model => model.Int)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Wis)
</dt>
<dd>
@Html.DisplayFor(model => model.Wis)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Cha)
</dt>
<dd>
@Html.DisplayFor(model => model.Cha)
</dd>
<dt>
@Html.DisplayNameFor(model => model.BaseAttack)
</dt>
<dd>
@Html.DisplayFor(model => model.BaseAttack)
</dd>
</dl>
</div>
@Html.Partial("~/Views/Shared/_Weapons.cshtml")
<p>
@Html.ActionLink("Edit", "Edit", new { id = Model.CharacterID }) |
@Html.ActionLink("Back to List", "Index")
</p>
我最后的部分视图本质上是另一个细节视图,但来自武器模型。我的目的是在一个视图上显示他拥有的角色和武器,但由于模型类型的冲突,我得到了错误。
有解决方法吗?
答案 0 :(得分:2)
除了使用编辑器/显示模板之外,您还可以通过两种不同的方式实现:
在你的Attacker.Models.Character中包含一个武器模型列表,并在这样的循环中渲染它们:
@foreach(weaponModel in Model.Weapons)
{
Html.RenderPartial("", weapon);
}
创建一个动作以按ID(或您想要使用的任何键)显示武器。在模型中包含武器键,并为每个武器渲染动作(此示例假定ShowWeapon
是同一控制器中的动作,但您当然可以通过指定它来使用另一个控制器):
@foreach(weaponId in Model.WeaponIds)
{
Html.RenderAction("ShowWeapon", new {id = weaponId});
}
使用编辑器或显示模板可以简化操作,但灵活性较差。这取决于您需要实现的目标,或者您已经拥有的内容。
编辑:关于&#34;灵活性&#34;
更准确地说,编辑器或显示模板类似于渲染部分,其差异在于根据模型类型自动选择视图模板。
例如,如果您定义类似&#39;持续时间&#39;其中包括小时和分钟属性,您可以创建
这很棒,因为每当您想要编辑此类值时,您都可以依赖Html.EditorFor
或Html.DisplayFor
来获取此模板,而无需任何额外的工作。这非常有用,因为您可以拥有一个具有多个Duration
属性的模型,并且他们可以自动获得&#34;以正确的方式约束。
但是,如果你有一个更复杂的模型,里面有很多属性,你很可能想以不同的方式显示它们。例如,
显然,在这种情况下,编辑/显示模板将是僵硬的。
当然,如果您始终以完全相同的方式显示或编辑模型,请使用编辑器/显示模板。如果没有,RenderPartial
或RenderAction
将提供所需的灵活性。
(注意:可以自定义显示和编辑模板向其传递额外数据,但实现普通视图/操作要困难得多。)
答案 1 :(得分:0)
是的,不要使用Partials。请改用编辑器或显示模板。我现在没有时间写完整的回复,如果他们想要,其他人可以自由...这些链接现在应该有所帮助。
http://blogs.msdn.com/b/nunos/archive/2010/02/08/quick-tips-about-asp-net-mvc-editor-templates.aspx http://www.growingwiththeweb.com/2012/12/aspnet-mvc-display-and-editor-templates.html http://www.codeproject.com/Articles/672591/Exploring-Display-and-Editor-Templates-in-ASP-NET