将不同的模型传递给局部视图

我试图从视图中将不同的模型传递给局部视图。 我有两个独立的控制器动作,它们和两个不同的视图模型。 但是当我从视图中调用局部视图时,它会给我错误

传递到字典中的模型项的类型为“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)) { 

UniFunctionViewModel


@Html.ValidationSummary(true)
@Html.LabelFor(model => model.detail, new { @class = "control-label col-md-2" })
@Html.TextBoxFor(model => model.detail, new { @placeholder = "Further Information" }) @Html.ValidationMessageFor(model => model.detail)

}

您正在使用正确的方法,但没有传递正确的参数

你可能想尝试这样:

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

如果你没有传入一个模型,它会自动从它的父模型中获取一个,在你的情况下是

 Application.ViewModels.Model1ViewModel 

您需要做的一件事是重新生成模型或使用模型中的属性。 例如:

  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")) { 
@Html.AntiForgeryToken() @Html.TextBoxFor(m => m.SomeProperty)
}

这很简单。 有一个html指令可以呈现局部视图。 以下是代码示例:

  @Html.Partial("nameOfPartial", Model) 

现在,模型可以来自您的主控制器。

或者您可以使用partialviewresult作为返回类型定义新的控制器操作,并尝试在页面中呈现它,如下所示:

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