Передать другую модель частичному представлению

Я пытаюсь передать другую модель в частичный вид из представления. У меня есть два отдельных действия контроллера для них обоих и две разные модели представлений. Но когда я вызываю частичный вид изнутри представления, он дает мне ошибку

Элемент модели, переданный в словарь, имеет тип "Application.ViewModels.Model1ViewModel", но для этого словаря требуется элемент модели типа "Application.ViewModels.PartialViewModel".

Я называю это следующим образом:

 @Html.Partial("_CreateUniFunctionPartial")

вызов модели в представлении

@model Application.ViewModels.Model1ViewModel

и модель в частичном файле вида

@model Application.ViewModels.PartialViewModel

Я не уверен, как передать частичный вид, чтобы он не выдавал эту ошибку.

ИЗМЕНИТЬ

Частичный вид

@model Application.ViewModels.PartialViewModel



 @using (Html.BeginForm("partialview", "ApplicationDetail", FormMethod.Post)) 
  {


<div class="form-horizontal">
    <h4>UniFunctionViewModel</h4>
    <hr />
    @Html.ValidationSummary(true)





    <div class="form-group">
        @Html.LabelFor(model => model.detail, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.TextBoxFor(model => model.detail, new { @placeholder = "Further Information" })
            @Html.ValidationMessageFor(model => model.detail)
        </div>
    </div>


</div>

}

Ответ 1

вы используете правильный метод, но не передаете правильные аргументы

вы можете попробовать это следующим образом:

@Html.Partial("~/[path_to_root_only_if_exists]/_CreateUniFunctionPartial.cshtml", new Application.ViewModels.PartialViewModel())

если вы не проходите в модели, он автоматически примет один из своего родителя, который в вашем случае

Application.ViewModels.Model1ViewModel

Ответ 2

Одна вещь, которую вам нужно будет сделать, - это восстановить модель или использовать свойство в модели. Например:

 public class OuterViewModel
 {
     public InnerViewModel InnerViewModel { get; set; }
 }

 public class InnerViewModel
 {
     public string SomeProperty { get; set; }
 }

На верхней странице вы можете принять OuterViewModel, а затем передать InnerViewModel в Partial.

Outer.cshtml:

 @model OuterViewModel
 @Html.Partial("_InnerPartial", Model.InnerViewModel)

_InnerPartial.cshtml:

 @model InnerViewModel
 @using (Html.BeginForm("Inner", "Controller"))
 {
      <div>
          @Html.AntiForgeryToken()
          @Html.TextBoxFor(m => m.SomeProperty)
          <input type="submit" value="Save" />
      </div>
 }

Ответ 3

Это довольно просто. Существует директива html, которая может отображать частичный вид. Ниже приведен пример кода:

 @Html.Partial("nameOfPartial", Model)

Теперь модель может быть от вашего основного контроллера.

или вы можете определить новое действие контроллера с partialviewresult в качестве типа возврата и попытаться отобразить его на странице следующим образом:

@{Html.RenderAction("Someaction", "somecontroller");}