我有一个控制器,它接受getbldgaddr_Result
的实例。我正在尝试创建一个视图,使用partials在页面上放置两个单独的视图模型。以下是"父视图"
@using DirectoryMVC.Models
@model Tuple<getbldgaddr_Result,getadministrators_Result>
@{
ViewBag.Title = "Central Office";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Central Office</h2>
<div class="row">
@*Display the getAddress view*@
@Html.Partial("_BuildingAddress", Model.Item1)
</div>
所以上面我使用的模型中的Item1是getbldgaddr_Result
。我已经尝试将其转换为getbldgaddr_Result
,但我收到以下错误。
传递到字典中的模型项的类型是&#39; System.Tuple`2 [DirectoryMVC.Models.getbldgaddr_Result,DirectoryMVC.Models.getadministrators_Result]&#39;,但此字典需要类型为&的模型项#39; DirectoryMVC.Models.getbldgaddr_Result&#39;
实际控制器是......
public class BuildingAddressController : Controller
{
private DirectoryEntities de;
public BuildingAddressController()
{
de = new DirectoryEntities();
}
// GET: BldgAddr
public ActionResult BldgAddr(getbldgaddr_Result bldgres)
{
//getbldgaddr_Result bldgResult = de.getbldgaddr(district, bldg_no, null).FirstOrDefault();
return View(bldgres);
}
}
我的猜测是,我可以让它以一个元组对象作为参数,但这似乎是反直觉的。建筑地址,不需要任何管理方面的内容。 有什么想法吗?
答案 0 :(得分:2)
为什么要将Tuple
发回视图?只需创建一个具有两个子视图模型的父视图模型 - 即。一个元组的每个项目 - 并从控制器返回。
假设Tuple<Class1, Class2>
,你可以像这样构建你的viewmodel:
public class ParentViewModel
{
public Class1 ChildViewModel1 { get; set; }
public Class2 ChildViewModel2 { get; set; }
}
在控制器方面,您只需执行以下操作:
var parentViewModel = new ParentViewModel
{
ChildViewModel1 = Tuple.Item1,
ChildViewModel2 = Tuple.Item2
};
return View(parentViewModel);
您的观点将是:
@model ParentViewModel
// ...
@Html.Partial("_Partial1", Model.ChildViewModel1)
@Html.Partial("_Partial2", Model.ChildViewModel2)
答案 1 :(得分:0)
确保Model.Item1不为null。当您传入的成员/属性为null时,MVC将恢复为父类型。