将正确的数据模型传递给局部视图的正确方法

mth*_*len 5 c# asp.net-mvc-4 visual-studio-2015

问题: 将视图模型传递给局部视图时出现错误消息。

主页:Index.cshmtl,使用类 DivisionModel

@model  DivisionViewModel

@{
  Layout = "~/Views/Shared/_Layout.cshtml";
}



@*<h2>Division</h2>*@
<div>

    <!-- Nav tabs -->
    <ul class="nav nav-tabs" role="tablist" id="divTabs">
        <li role="presentation" class="active"><a href="#home" aria-controls="home" role="tab" data-toggle="tab">Home</a></li>

    </ul>

    <!-- Tab panes -->
    <div class="tab-content">

        <!-- Home -->
        <div role="tabpanel" class="tab-pane active" id="home">
            @Html.Partial("~/Views/Company/Division/_prtDivision.cshtml", new addDivisionViewModel())
        </div>
Run Code Online (Sandbox Code Playgroud)

局部视图:_prtDivision.cshmtl,使用addDivisionViewModel

@model addDivisionViewModel

@{
    Layout = "~/Views/Company/Division/Index.cshtml";
}

@{
  ViewBag.Title = "Create";
}

<h2>add division</h2>

@using (Html.BeginForm("addDivision", "Division", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
    <hr />

    <div class="row">
        <div class="col-sm-12">
            @Html.ValidationSummary(false, string.Empty, new { @class = "text-danger" })
        </div>
    </div>
Run Code Online (Sandbox Code Playgroud)

但是,当我将 'addDivionsViewModel 传递给视图时。

即在 tabpanel 的索引页上

@Html.Partial("~/Views/Company/Division/_prtDivision.cshtml", new addDivisionViewModel())
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

在此处输入图片说明

表示传递的模型不正确......如果我将调用方法更改为:

@Html.Partial("~/Views/Company/Division/_prtDivision.cshtml", new DivisionViewModel())
Run Code Online (Sandbox Code Playgroud)

或者

@Html.Partial("~/Views/Company/Division/_prtDivision.cshtml", Model)
Run Code Online (Sandbox Code Playgroud)

我收到以下消息:

在此处输入图片说明

因此,无论我发送给局部视图的模型是什么,VS 都会告诉我它想要相反的模型?

我一直在围绕这个话题进行大量挖掘,对于看起来相对简单的事情,结果并没有那么简单......

我试过的:

  • 添加 addDivisionViewModel 作为 DivisionModel 的属性并将 Model.addDivisionViewModel 传递给 _prtDivision.cshtml
  • 遵循以上但在发送之前将属性分配给创建的变量(即@{ var m = Model.addDivisionViewModel}
  • 传递Model和分离.addDivisionViewModelfrom 模型。失去功能并失去对原始数据的引用。即无法显示数据(树结构太深 => Model.addDivisonViewModel.Division.DivisionName)以及在网络上看到的大约一百种其他方法......

任何帮助将不胜感激

小智 1

您的部分视图有一个模型,addDivisionViewModel但它还包括

Layout = "~/Views/Company/Division/Index.cshtml";
Run Code Online (Sandbox Code Playgroud)

并且Index.cshtml视图有一个模型是DivisionViewModel

它不可能两者兼而有之(除非其中一个源自另一个)。从局部视图中删除该Layout = ".."线(局部视图不应具有布局)