@HTML.Partial 对不同 class 中的相同 属性 使用通用 class

@HTML.Partial use generic class for the same property in different classes

我的项目中有几个 类 具有相同的 属性。示例:PersonID.

这个 属性 链接到人 table,我创建了一个带有两个按钮的 select 框。而不是对具有 PersonID 的视图执行此操作:

<div class="col-md-12">
    @Html.LabelFor(m => m.PersonID) @Html.ValidationMessageFor(m => m.PersonID)
    <div class="input-group">
        @Html.DropDownList("PersonID", (SelectList)ViewBag.ListPerson, String.Empty, new { @class = "form-control" })
        <span class="input-group-btn">
            <button class="btn btn-default"><span class="glyphicon glyphicon-search"></span></button>
        </span>
        <span class="input-group-btn">
            <button id="selectItem" class="btn btn-warning"><span class="glyphicon glyphicon-check"></span></button>
        </span>
    </div>

想使用部分:

@Html.Partial("~/Views/Frame/Person.cshtml", Model) 

问题

如何在Partial中有一个模型,并使用调用Partial的View的模型,可以是不同的类和相同的属性PersonID,而不必多做与 HTML 相同的 Partial 的,或者不想使用 @model Project.Models.User,而使用泛型。

部分

@model Project.Models.User

<div class="col-md-12">
  @Html.LabelFor(m => m.PersonID) @Html.ValidationMessageFor(m => m.PersonID)
  <div class="input-group">
      @Html.DropDownList("PersonID", (SelectList)ViewBag.ListPerson, String.Empty, new { @class = "form-control" })
      <span class="input-group-btn">
          <button class="btn btn-default"><span class="glyphicon glyphicon-search"></span></button>
      </span>
      <span class="input-group-btn">
          <button id="selectItem" class="btn btn-warning"><span class="glyphicon glyphicon-check"></span></button>
      </span>
  </div>
</div>  

您可以选择以下两种方法之一(可能还有更多方法,但这些方法可能是最常见的)


选项 1 - 接口

首先创建一个接口class,例如:

public interface IPerson
{
    int PersonID { get; set; }
}

现在,对于每个具有人员 ID 的实体,使其实现该接口:

public class SomeEntity : IPerson
{
    public int PersonID { get; set; }

    //snip
}

现在视图可能如下所示:

@model YourNamespace.IPerson

The person ID is @Model.PersonID

选项 2 - 继承

你的基地class:

public abstract class PersonBase
{
    public int PersonID { get; set; }
}

并且实体像这样从基础继承:

public class SomeEntity : PersonBase
{
    //snip
}

和你的看法几乎一模一样:

@model YourNamespace.PersonBase

The person ID is @Model.PersonID