1

我正在创建一个部分视图来显示记录的审计印章......即

  • 创建于
  • 由...制作
  • 修改后
  • 修改者

我目前在我的所有视图模型中创建了一个包含这些属性的 .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 也适用相同的概念(即说明部分实现了 IAudiStamps 接口???)

4

2 回答 2

2

最后,我将部分的模型设置为接口,然后确保我的类也实现了这样的接口:

创建 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)
于 2012-12-26T18:34:27.760 回答
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作为模型类型来绑定到相关属性。任何需要该部分视图的视图都应该从基础 ViewModel 继承其模型,因此这些属性都可用于模型绑定。

于 2012-12-24T22:21:56.917 回答