我正在创建一个部分视图来显示记录的审计标记......即。
我目前在我的所有视图模型中创建了一个新的子类,其中.AuditStamps包含这些属性,在我的控制器中填充它并将其传递给部分属性。
以下是我的一个视图模型的示例。注意AudiStamps子类
public class ItemViewModel
{
public Item Item { get; set; }
public AuditStampsViewModel AuditStamps { get; set; }
}
这是我的部分内容,起诉这个子类
@model OTIS.AppServ.Shared.AuditStampsViewModel
<hr />
<div class="twoColumn floatLeft">
<div class="editor-field">
<b>Created By:</b>
@Html.DisplayFor(model => model.CreatedByName) on @Html.DisplayFor(model => model.CreatedOn)
</div>
</div>
<div class="twoColumn floatLeft">
<div class="editor-field" style="text-align:right;">
<b>Modified By:</b>
@Html.DisplayFor(model => model.ModifiedByName) on @Html.DisplayFor(model => model.ModifiedOn)
</div>
</div>
但是我想知道因为我的所有类都有这些常见属性,所以我真的需要通过添加和填充这个子类来完成。我唯一的原因是,因为我无法弄清楚如何在部分中声明一个通用模型...我希望如果我没有声明模型,部分将会起作用,但事实并非如此。我收到一个错误:
An expression tree may not contain a dynamic operation
我怎样才能做到这一点?看起来像接口只能使用类来解决这个问题,但不确定使用Partials是否适用相同的概念(即说明部分实现IAuditStamps接口???)
答案 0 :(得分:2)
最后,我将partial的模型设置为一个接口,然后确保我的类也实现了这样的接口:
创建IAuditStamps接口
public interface IAuditStamps
{
int CreatedById { get; set; }
string CreatedByName { get; set; }
DateTime CreatedOn { get; set; }
int ModifiedById { get; set; }
string ModifiedByName { get; set; }
DateTime ModifiedOn { get; set; }
}
我的实现接口的类
public partial class Item : IEntityId, ICompanyId, IAuditStamps
ItemViewModel(使用上面的类Item)
public class ItemViewModel
{
public Item Item { get; set; }
}
部分
@model OTIS.domain.IAuditStamps
<hr />
<div class="twoColumn floatLeft">
<div class="editor-field">
<b>Created By:</b>
@Html.DisplayFor(model => model.CreatedByName) on @Html.DisplayFor(model => model.CreatedOn)
</div>
</div>
<div class="twoColumn floatLeft">
<div class="editor-field" style="text-align:right;">
<b>Modified By:</b>
@Html.DisplayFor(model => model.ModifiedByName) on @Html.DisplayFor(model => model.ModifiedOn)
</div>
</div>
调用部分:
@Html.Partial("_AuditStamps", Model.Item)
答案 1 :(得分:1)
这是所有视图模型可以继承的ViewModel
基类的主要候选者:
public abstract class ViewModel
{
public DateTime CreatedOn { get; set; }
public string CreatedBy { get; set; }
public DateTime ModifiedOn { get; set; }
public string ModifiedBy { get; set; }
}
public class ItemViewModel : ViewModel
{
public Item Item { get; set; }
}
然后,您的部分可以将ViewModel
作为其模型类型绑定到相关属性。任何需要partial的视图都应该使其模型继承自ViewModel基础,因此这些属性都可用于模型绑定。