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

时间:2014-05-11 15:08:43

标签: c# asp.net-mvc asp.net-mvc-5 asp.net-mvc-partialview

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

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

}

3 个答案:

答案 0 :(得分:28)

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

你可能想这样试试:

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

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

Application.ViewModels.Model1ViewModel

答案 1 :(得分:9)

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

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

答案 2 :(得分:3)

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

 @Html.Partial("nameOfPartial", Model)

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

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

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