【问题标题】:MVC 4 - how do I pass model data to a partial view?MVC 4 - 如何将模型数据传递给局部视图?
【发布时间】:2013-02-15 09:15:33
【问题描述】:

我正在构建一个个人资料页面,其中包含许多与特定模型(租户)相关的部分 - AboutMe、MyPreferences - 诸如此类。这些部分中的每一个都将是一个局部视图,以允许使用 AJAX 进行局部页面更新。

当我单击 TenantController 中的 ActionResult 时,我能够创建一个强类型视图,并且模型数据可以很好地传递给视图。我无法通过部分视图来实现这一点。

我创建了一个局部视图_TenantDetailsPartial

@model LetLord.Models.Tenant
<div class="row-fluid">
    @Html.LabelFor(x => x.UserName) // this displays UserName when not in IF
    @Html.DisplayFor(x => x.UserName) // this displays nothing
</div>

然后我有一个视图MyProfile,它将呈现提到的部分视图:

@model LetLord.Models.Tenant
<div class="row-fluid">
    <div class="span4 well-border">
         @Html.Partial("~/Views/Tenants/_TenantDetailsPartial.cshtml", 
         new ViewDataDictionary<LetLord.Models.Tenant>())
    </div>
</div>

如果我将代码包装在 _TenantDetailsPartial 内的 @if(model != null){} 内的 DIV 内,页面上不会显示任何内容,所以我猜测有一个空模型被传递给视图。

当我从ActionResult 创建强类型视图时,“会话”中的用户如何传递给视图?如何将“会话”中的用户传递给不是从ActionResult 创建的局部视图?如果我在这个概念上遗漏了什么,请解释一下。

【问题讨论】:

    标签: c# asp.net-mvc model partial-views asp.net-mvc-views


    【解决方案1】:

    我知道问题是 MVC4 特有的。但由于我们已经超越了 MVC4,如果有人在寻找 ASP.NET Core,您可以使用:

    <partial name="_My_Partial" model="Model.MyInfo" />
    

    【讨论】:

      【解决方案2】:

      将模型数据传递给局部视图的三种方式(可能还有更多)

      这是查看页面

      方法一在视图中填充

      @{    
          PartialViewTestSOl.Models.CountryModel ctry1 = new PartialViewTestSOl.Models.CountryModel();
          ctry1.CountryName="India";
          ctry1.ID=1;    
      
          PartialViewTestSOl.Models.CountryModel ctry2 = new PartialViewTestSOl.Models.CountryModel();
          ctry2.CountryName="Africa";
          ctry2.ID=2;
      
          List<PartialViewTestSOl.Models.CountryModel> CountryList = new List<PartialViewTestSOl.Models.CountryModel>();
          CountryList.Add(ctry1);
          CountryList.Add(ctry2);    
      
      }
      
      @{
          Html.RenderPartial("~/Views/PartialViewTest.cshtml",CountryList );
      }
      

      方法二 穿过 ViewBag

      @{
          var country = (List<PartialViewTestSOl.Models.CountryModel>)ViewBag.CountryList;
          Html.RenderPartial("~/Views/PartialViewTest.cshtml",country );
      }
      

      方法三 通过模型

      @{
          Html.RenderPartial("~/Views/PartialViewTest.cshtml",Model.country );
      }
      

      【讨论】:

      • 能否请您也放部分视图代码。当使用第二种方法将值传递给局部视图时,我什么也没得到
      • @HeemanshuBhalla 我认为 var countries = ViewBag.CountryList as List 可以给你价值
      【解决方案3】:

      另外,这可以使它起作用:

      @{
      Html.RenderPartial("your view", your_model, ViewData);
      }
      

      @{
      Html.RenderPartial("your view", your_model);
      }
      

      有关 MVC 中 RenderPartial 和类似 HTML 帮助器的更多信息,请参阅this popular StackOverflow thread

      【讨论】:

        【解决方案4】:

        您实际上并没有将模型传递给 Partial,而是传递了 new ViewDataDictionary&lt;LetLord.Models.Tenant&gt;()。试试这个:

        @model LetLord.Models.Tenant
        <div class="row-fluid">
            <div class="span4 well-border">
                 @Html.Partial("~/Views/Tenants/_TenantDetailsPartial.cshtml", Model)
            </div>
        </div>
        

        【讨论】:

        • 我之前真的尝试过,但没有成功!我不能重建我的解决方案...谢谢,它有效。
        猜你喜欢
        • 1970-01-01
        • 2014-01-14
        • 2014-02-05
        • 1970-01-01
        • 1970-01-01
        • 2019-02-01
        • 1970-01-01
        相关资源
        最近更新 更多