发布
社区首页 >问答首页 >将不同的模型传递给局部视图

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

Stack Overflow用户
提问于 2014-05-11 23:08:43
回答 3查看 44.4K关注 0票数 22

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

传入字典的模型项的类型为“Application.ViewModels.Model1ViewModel”,但此字典需要类型为“Application.ViewModels.PartialViewModel”的模型项。

我这样叫它:

代码语言:javascript
代码运行次数:0
复制
 @Html.Partial("_CreateUniFunctionPartial")

视图中的模型调用是

代码语言:javascript
代码运行次数:0
复制
@model Application.ViewModels.Model1ViewModel

并且局部视图文件中的模型是

代码语言:javascript
代码运行次数:0
复制
@model Application.ViewModels.PartialViewModel

我不确定如何传递局部视图,所以它不会给出这个错误。

编辑

局部视图

代码语言:javascript
代码运行次数:0
复制
@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>

}

EN

回答 3

Stack Overflow用户

发布于 2014-06-28 18:07:49

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

你可以像这样试一试:

代码语言:javascript
代码运行次数:0
复制
@Html.Partial("~/[path_to_root_only_if_exists]/_CreateUniFunctionPartial.cshtml", new Application.ViewModels.PartialViewModel())

如果您没有传入模型,它将自动从其父模型中获取一个,在本例中为

代码语言:javascript
代码运行次数:0
复制
Application.ViewModels.Model1ViewModel
票数 34
EN

Stack Overflow用户

发布于 2016-03-11 05:28:12

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

代码语言:javascript
代码运行次数:0
复制
 public class OuterViewModel
 {
     public InnerViewModel InnerViewModel { get; set; }
 }

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

在首页中,您可以接受OuterViewModel,然后将InnerViewModel传递给Partial。

Outer.cshtml:

代码语言:javascript
代码运行次数:0
复制
 @model OuterViewModel
 @Html.Partial("_InnerPartial", Model.InnerViewModel)

_InnerPartial.cshtml:

代码语言:javascript
代码运行次数:0
复制
 @model InnerViewModel
 @using (Html.BeginForm("Inner", "Controller"))
 {
      <div>
          @Html.AntiForgeryToken()
          @Html.TextBoxFor(m => m.SomeProperty)
          <input type="submit" value="Save" />
      </div>
 }
票数 12
EN

Stack Overflow用户

发布于 2014-05-11 23:23:41

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

代码语言:javascript
代码运行次数:0
复制
 @Html.Partial("nameOfPartial", Model)

现在,模型可能来自你的主控制器。

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

代码语言:javascript
代码运行次数:0
复制
@{Html.RenderAction("Someaction", "somecontroller");}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23594228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档