大家好,我不知道怎么做。我有2个独立模型的两个视图,我想结合2,以便它们都在一个视图上。
查看1:
@model IEnumerable<TelephoneNumberManagement.Models.Range>
<table>
<tr>
<th>
RangeName
</th>
<th>
RangeNumber
</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink(item.RangeName, "ViewSubRange", new { id = item.ID })
</td>
<td>
@item.RangeNumber
</td>
</tr>
}
</table>
查看2: -
@model IEnumerable<TelephoneNumberManagement.Models.TestNumber>
<h2>Index</h2>
<table>
<tr>
<th>
Number
</th>
<th>
Status
</th>
<th>
Customer
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>@item.Number</td>
<td>@item.Status.StatusName</td>
<td>@item.CustomerID</td>
</tr>
}
</table>
HomeController中: -
public ViewResult Index()
{
return View(context.Ranges.ToList().OrderBy(m => m.RangeName));
}
public ActionResult ViewSubRange(int id)
{
IEnumerable<TestNumber> testNumbersList = context.TestNumbers.Where(m => m.RangeID == id).ToList();
return View("SubRange", testNumbersList);
}
任何帮助都会非常感激,因为我正用这个撞击墙壁!
答案 0 :(得分:3)
获取两个视图并将它们放入部分视图中(如果您仍然需要原始视图,则它们也使用部分视图,以便您的视图在一个位置定义 - 部分视图)。对于“在一个视图中”,添加一个新操作和一个模型,其中包含部分所需的每个模型的实例。
型号:
public class MyBothInOneModel { public ModelA modelA { get; set; } public ModelB modelB { get; set; } }
动作:
public ViewResult BothInOne(int idForB) { MyBothInOneModel m = new MyBothInOneModel(); m.modelA = context.Ranges.ToList().OrderBy(m => m.RangeName)); m.modelB = context.TestNumbers.Where(m => m.RangeID == idForB).ToList(); }
查看 - 添加一个视图,调用每个渲染部分:
... Html.RenderPartial(Model.modelA, "PartialA"); Html.RenderPartial(Model.modelB, "PartialB"); ...
或者您可以使用ViewData / ViewBag来避免创建MyBothInOneModel类。
答案 1 :(得分:1)
你有很多选择。首先,您可以创建具有属性
的ViewModel IEnumerable<TelephoneNumberManagement.Models.TestNumber> TestNumbers
和属性
IEnumerable<TelephoneNumberManagement.Models.Range> Ranges
然后返回一个视图,绑定到新的ViewModel并使用组合数据。
作为替代方案(imho smarter解决方案),您可以将每个视图呈现为子视图@Html.Action("ActionForView1")
和@Html.Action("ActionForView2")
。
答案 2 :(得分:1)
您可以使用ViewModel模式来解决此问题。创建一个“ViewModel”,它结合了给定视图所需的所有不同模型和/或表示逻辑。
e.g:
class TelephoneViewModel
{
public IEnumerable<TelephoneNumberManagement.Models.TestNumber> { get; set;}
public IEnumerable<TelephoneNumberManagement.Models.Range> { get; set; }
}
然后让你的新组合视图使用ViewModel作为它的模型。
答案 3 :(得分:0)
这是我所谈论的基本例子。
public class LoginRegisterMemberViewModel
{
public OpenIdLoginViewModel OpenIdLoginViewModel { get; set; }
public SiteLoginViewModel SiteLoginViewModel { get; set; }
public RegisterMemberViewModel RegisterMemberViewModel { get; set; }
public string ReturnUrl { get; set; }
}
在我的登录视图上我是用户@model Web.ViewModels.LoginRegisterMemberViewModel
部分视图也使用@model Web.ViewModels.LoginRegisterMemberViewModel 所以现在我可以访问LoginRegsiterMemberViewModel.SiteLoginViewModel.property等。
希望这不完全取决于你想要完成的事情。
答案 4 :(得分:0)
另一种选择是为您的观点使用动态变量
@model IEnumerable<dynamic>
然后你可以将你想要的任何模型发送给视图,但是你需要明智地使用什么属性。
答案 5 :(得分:0)
如果您希望获得干净的分离,另一个不错的选择是从主视图中使用Html.RenderAction。然后实现为每个描述的视图分离控制器。