Передать другую модель частичному представлению
Я пытаюсь передать другую модель в частичный вид из представления. У меня есть два отдельных действия контроллера для них обоих и две разные модели представлений. Но когда я вызываю частичный вид изнутри представления, он дает мне ошибку
Элемент модели, переданный в словарь, имеет тип "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");}