元组Item1到部分的MVC传递模型

时间:2017-03-27 19:01:10

标签: c# asp.net-mvc

我有一个控制器,它接受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);
        }
    }

我的猜测是,我可以让它以一个元组对象作为参数,但这似乎是反直觉的。建筑地址,不需要任何管理方面的内容。 有什么想法吗?

2 个答案:

答案 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将恢复为父类型。