@HTML.Partial对不同类中的相同属性使用泛型类

时间:2015-02-11 23:32:24

标签: c# asp.net-mvc partial-views asp.net-mvc-partialview

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

此属性链接到Person表,我创建一个带有两个按钮的选择框。而不是对具有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>

想要使用Partial:

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

问题

我如何在Partial中拥有一个模型,并使用View调用Partial的模型,该模型可以是不同的类和相同的属性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 个答案:

答案 0 :(得分:2)

你可以采取以下两种方式之一(可能有更多方法,但这些方法可能最常见)


选项1 - 接口

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

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 - 继承

您的基类:

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

实体从基地继承如下:

public class SomeEntity : PersonBase
{
    //snip
}

您的观点几乎完全相同:

@model YourNamespace.PersonBase

The person ID is @Model.PersonID