2013-04-25 75 views
2

所以我在asp.net mvc 4项目中工作,我在我的视图中有一个问题,我想要的是创建一个视图与2不同类型的模型,第一视图(索引)采取IEnumerable(Models.myModel)第二个用户详细信息)采取Models.myModel,这是我的型号代码:如何用多个模型创建视图mvc 4?

public class SubscribersModel 
{ 

    [Required] 
    [DataType(DataType.Text)] 
    public string name { get; set; } 

    [Required] 
    [DataType(DataType.Text)] 
    [StringLength(maximumLength: 10, MinimumLength = 7)] 
    public string cin { get; set; } 

    [Required] 
    [DataType(DataType.Date)] 
    public DateTime birthday { get; set; } 

    [DataType(DataType.Text)] 
    public string birthplace { get; set; } 
    } 

我的控制器代码:

public class SubscribersController : Controller 
{ 
    private AgencyDbEntities dbcontext = new AgencyDbEntities(); 
    private Subscribe sb = new Subscribe(); 

    public ActionResult Index() 
    { 
     var subscribers = from sb in dbcontext.Subscribes select new SubscribersModel {  cin = sb.cin, name = sb.name, birthday = (DateTime)sb.birthDay, birthplace = sb.birthPlace }; 

     return View(subscribers); 
    } 

    public ActionResult Details(string id,string cin,string name) 
    { 
     var subscriber = new SubscribersModel(); 
     IEnumerable<Subscribe> list = from s in dbcontext.Subscribes select s; 
     foreach (var sb in list) 
     { 
      if (sb.cin == id) 
      { 
       subscriber.cin = sb.cin; 
       subscriber.name = sb.name; 
       subscriber.birthday = (DateTime)sb.birthDay; 
       subscriber.birthplace = sb.birthPlace; 
      } 
     } 
     return View(subscriber); 
    } 
} 

我的索引视图:

@model IEnumerable<_3SDWebProject.Models.SubscribersModel> 

@{ 
    ViewBag.Title = "Subscribers"; 
} 
    <div class="sidebar"> 
     //here i want to show my details view 
    </div> 
<div class="content" style="width: 700px; margin-left: 250px; height: 545px;margin- top: -30px;"> 
    <h2>Subscribers</h2> 
<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 

@Styles.Render("~/Content/css") 
<script src="@Url.Content("~/Scripts/Table.js")" type="text/javascript"></script> 
<table class="altrowstable" id="alternatecolor"> 
<tr> 
    <th> 
     CIN 
    </th> 
    <th> 
     Name 
    </th> 
    <th> 
     birthday 
    </th> 
    <th> 
     birthplace 
    </th> 
    <th class="operations"> 
     Operations 
    </th> 
</tr> 

@foreach (var item in Model) 
{ 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.cin) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.name) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.birthday) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.birthplace) 
    </td> 
    <td> 
     @Html.ActionLink("Details", "Details", new { id = item.cin }, new { @class = "details-logo"}) 
    </td> 
</tr> 
} 

</table> 
</div> 

我详细查看:

@model _3SDWebProject.Models.SubscribersModel 

<fieldset> 
<legend>SubscribersModel</legend> 

<div class="display-label"> 
    @Html.DisplayNameFor(model => model.name) 
</div> 
<div class="display-field"> 
    @Html.DisplayFor(model => model.name) 
</div> 
<div class="display-label"> 
    @Html.DisplayNameFor(model => model.birthday) 
</div> 
<div class="display-field"> 
    @Html.DisplayFor(model => model.birthday) 
</div> 

<div class="display-label"> 
    @Html.DisplayNameFor(model => model.birthplace) 
</div> 
<div class="display-field"> 
    @Html.DisplayFor(model => model.birthplace) 
</div> 
</fieldset> 

所以请,如果有人有任何想法或解决方案,我将非常感激: 注:此图片描述我想要什么 enter image description here

+1

视图只应与一个模型相关。您可以将两个模型合并为一个模型,并在视图中使用该组合模型。 – Flavia 2013-04-25 16:15:38

+0

我不同意这一点。一个观点可以很好地并且有时必须与需要的模型相关联。这就是为什么我使用我称之为'视图模型'(即使它不是绝对正确)的东西,模型和视图之间的类,以构建适当的内存结构,并将其传递给视图。但绝不可将其命名为“模型”。请记住,如果您使用的是EF Code First,那么创建一个新的“组合”模型实际上会导致数据库中出现一个新表。我怀疑这是目标.... – BernardG 2013-09-26 16:01:50

回答

9

创建包含这两种视图模型的新的复合视图模型。

public class CompoundViewModel 
{ 
    public IEnumerable<SubscribersModel> AllSubscribers {get; set;} 
    public SubscribersModel SelectedSubscriber {get; set;} 
} 

理想的情况下也拆分视图成局部视图并使用DisplayFor<>EditorFor<>呈现您的化合物模型的这两个部分放进去。这样,如果你需要的话,你可以在应用程序的其他地方重新使用该视图作为'SubscriberModel'。

您的控制器代码也可以通过使用依赖注入框架(例如Autofac)来注入您当前正在创建的那些依赖关系。

另一种方法是,假设您使用相同的模型作为列表和细节视图,将使用Javascript来处理此客户端,无论是手动使用jQuery还是使用允许客户端的新框架之一模型绑定像Knockout.js或Angular.js。

+0

谢谢@lan它完美的作品,我创建了一个包含两个模型的类。 – Mohammadov 2013-04-26 14:39:04

0

你只需要创建第二个视图,称为Details,这是强烈键入SubscribersModel

@model _3SDWebProject.Models.SubscribersModel 

任何地方的代码视图名称右键单击您的Details()行动
选择添加视图...
离开“详细信息”
检查“创建一个强类型的视图”
从选择SubscribersModel Model类下拉
脚手架模板:详细
点击“添加”

+0

我已经做到了这个问题是我不能在两个不同的模型类型在相同的视图 – Mohammadov 2013-04-25 15:46:39

+0

哎呦,我看到你的SS的左侧。 – Rohrbs 2013-04-25 15:51:39

相关问题