The correct method to transfer the correct data model to a partial view

Problem: Error message when passing viewmodel to partial view.

Main page: Index.cshmtl, uses the DivisionModel class

@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>

Partial view: _prtDivision.cshmtl, uses 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>

However, when I pass the 'addDivionsViewModel to the view.

i.e. on the index page in the tab

@Html.Partial("~/Views/Company/Division/_prtDivision.cshtml", new addDivisionViewModel())

I get the following error message:

enter image description here

Specifying the accepted model is incorrect ... If I then change the invocation method to:

@Html.Partial("~/Views/Company/Division/_prtDivision.cshtml", new DivisionViewModel())

or

@Html.Partial("~/Views/Company/Division/_prtDivision.cshtml", Model)

I get the following message:

enter image description here

So, no matter what model I send in a partial view, VS tells me that he wants the opposite?

I knew a lot about this topic, for something that would seem relatively simple, in fact it is not so simple ...

What I tried:

  • addDivisionViewModel DivisionModel Model.addDivisionViewModel _prtDivision.cshtml
  • , (.. @{ var m = Model.addDivisionViewModel})
  • Model .addDivisionViewModel . . ( = > Model.addDivisonViewModel.Division.DivisionName) , ...

+4
2

addDivisionViewModel,

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

Index.cshtml , DivisionViewModel

( ). Layout = ".." ( )

+1

partialviewLayout null

@model addDivisionViewModel

@{
    Layout = null;
}
0

Source: https://habr.com/ru/post/1672620/


All Articles