【问题标题】:How to Pass View Data to Partial View in Asp.net core?如何将视图数据传递给 Asp.net 核心中的部分视图?
【发布时间】:2020-09-11 09:56:48
【问题描述】:

我要使用 2.2 版本的新 .NET 核心。我正在尝试使用以下代码将数据传递给部分视图:

 <partial name="_Emplyees" model="@Model.Employees" view-data="@new ViewDataDictionary(ViewData) { { "index", index }}"/>

但它给出的语法错误。有人可以指导如何传递数据并在部分视图中使用吗?提前致谢。

【问题讨论】:

标签: c# asp.net-core-mvc


【解决方案1】:

问题是view-data 属性中有双引号。您需要在属性值周围使用单引号。

<partial name="_Emplyees" model="Employees" view-data='@new ViewDataDictionary(ViewData) { { "index", index } }'/>

另外,@Model 在这里是多余的,所以我删除了它。

【讨论】:

    【解决方案2】:

    您可以在 ASP.Net Core MVC 中将 ViewData 传递给部分视图,如下所示:

    1.型号:

    public class TestModel
    {
        public string Employees { get; set; }
    }
    

    2.View(Create.cshtml):

    @model TestModel
    @{ 
        ViewData["index"] = true;
    }
    <partial name="_Emplyees" model="@Model" view-data="ViewData" />
    

    3.局部视图:

    <h3>Index: @ViewData["index"]</h3>
    @model TestModel
    
    @if ((bool)ViewData["index"])
    {
        @Model.Employees
    }
    else
    {
        <input asp-for="Employees" type="number" class="form-control" />
    }
    

    4.控制器:

    public IActionResult Create()
    {
        var testmodel = new TestModel() { Employees = "aaa" };
        return View(testmodel);
    }
    

    5.结果:

    参考:

    How to use view-data pass the data to partial view

    https://docs.microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-3.0#access-data-from-partial-views

    【讨论】:

      【解决方案3】:

      Partial views in ASP.NET CorePartial Tag Helper in ASP.NET Core

      <partial name="Shared/_ProductPartial.cshtml" for="Product">
      
      <partial name="_ProductViewDataPartial" for="Product" view-data="ViewData">
      
      @await Html.PartialAsync("_ProductPartial", product)
      

      注意:

      当一个局部视图被实例化时,它会收到一份 父级的 ViewData 字典。

      【讨论】:

        【解决方案4】:

        根据文档,当部分视图被实例化时,它会收到父视图数据字典的副本。对局部视图中的数据所做的更新不会持久保存到父视图。局部视图返回时,局部视图中的 ViewData 更改将丢失。

        查看文档here

        对我来说,我只是创建了一个局部视图,在另一个视图中访问它并直接在其中使用 ViewData。

        ~/Views/Shared/_PageTop.cshtml

        <a asp-controller="Home" asp-action="Index">Go Back</a>
        <h1>@ViewData["Title"]</h1>
        

        ~/Views/Create.cshtml

        @{
            ViewData["Title"] = "Create";
        }
        <partial name="_PageTop" />
        

        因此,无需向局部视图 _PageTop 传递任何内容,我就可以使用 @ViewData["Title"] 直接访问父级的 Title 属性。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-02
          • 2021-04-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多