【问题标题】:pass a different model to the partial view将不同的模型传递给局部视图
【发布时间】:2014-06-28 22:36:11
【问题描述】:

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

传入字典的模型项的类型为“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>

}

【问题讨论】:

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


【解决方案1】:

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

 public class OuterViewModel
 {
     public InnerViewModel InnerViewModel { get; set; }
 }

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

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

外部.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】:

    你使用了正确的方法,但没有传入正确的参数

    你可能想这样尝试:

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

    如果您不传入模型,它将自动从其父模型中获取模型,在您的情况下是

    Application.ViewModels.Model1ViewModel
    

    【讨论】:

    • 如果你有一个必须从数据库中获取数据、做一些复杂的事情等,那么我仍然可以使用RenderPartial 只需将数据映射到模型属性,检查this
    【解决方案3】:

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

     @Html.Partial("nameOfPartial", Model)
    

    现在这里的模型可能来自您的主控制器。

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

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

    【讨论】:

    • @Html.Partial("nameOfPartial", Model) 给出这样的模型是行不通的。它仍然与主视图中的模型发生冲突。部分视图包含一个表单,当我使用它时,renderaction 方法会得到帖子吗?
    • 我不确定渲染操作是否有效。但是你可以试试。唯一的区别是 renderaction 将加载一个返回部分视图结果而不是视图结果的操作。试试看是否有效
    • 很好地保存条目,您需要在局部视图中有一个 post 方法。你有吗?
    • 是的,我愿意。我有一个 get 控制器和一个 post 控制器。
    • 您的局部视图中没有提交按钮?期望它如何提交值?
    猜你喜欢
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多