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

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

Элемент модели, переданный в словарь, имеет тип 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>

}


person user3541362    schedule 11.05.2014    source источник
comment
Для тех, кто хочет знать, как решить этот вопрос в .NET Core 2.1–3.1, см. docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/ .   -  person Theophilus    schedule 19.08.2020


Ответы (3)


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

вы можете попробовать это так:

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

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

Application.ViewModels.Model1ViewModel
person alexo    schedule 28.06.2014
comment
Если у вас есть тот, который должен получать данные из БД, делать что-то сложное и т. Д., Я все еще могу использовать RenderPartial, просто отображая данные в свойстве Model, отметьте это - person Shaiju T; 03.10.2016

Вам нужно будет заново создать модель или использовать свойство в модели. Например:

 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>
 }
person Zachare Sylvestre    schedule 10.03.2016

Сделать это довольно просто. Есть директива html, которая может отображать частичное представление. Ниже приведен пример кода:

 @Html.Partial("nameOfPartial", Model)

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

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

@{Html.RenderAction("Someaction", "somecontroller");}
person qamar    schedule 11.05.2014
comment
@ Html.Partial (nameOfPartial, Model) предоставление такой модели не работает. он по-прежнему конфликтует с моделью на главном экране. частичное представление содержит форму, получит ли метод визуализации сообщение, когда я его использую? - person user3541362; 11.05.2014
comment
Я не уверен, сработает действие render или нет. Но вы можете попробовать это. единственная разница будет: рендеринг загрузит действие, которое возвращает частичный результат просмотра вместо результата просмотра. попробуйте это и посмотрите, работает ли это - person qamar; 11.05.2014
comment
хорошо, чтобы сохранить запись, вам нужно иметь метод публикации в частичном представлении. у тебя это есть? - person qamar; 11.05.2014
comment
Да. У меня есть контроллер получения и пост-контроллер. - person user3541362; 11.05.2014
comment
И у вас нет кнопки отправки в частичном представлении? Как ожидать, что он отправит значения? - person qamar; 11.05.2014
comment
у меня есть отправка в моем основном представлении. Я хочу, чтобы он использовал эту отправку, а не свою собственную. - person user3541362; 11.05.2014
comment
Теперь я понимаю. Что ж, я все еще не уверен, почему у вас есть тег формы в вашем частичном представлении? Один из вариантов здесь, сделать сообщение jquery для вашего главного контроллера. получить все значения через fieldname. есть много примеров сообщений jquery. а также вам необходимо обновить модель mailview, чтобы добавить дополнительное поле для размещения значения частичного просмотра. и избавьтесь от этих тегов формы из частичного просмотра - person qamar; 11.05.2014