如何将数组从控制器传递到_layout.cshtml

时间:2018-08-20 08:11:50

标签: javascript arrays entity-framework asp.net-core-mvc

我必须将一个数组传递到我的_layout页面(该页面没有@model)。 该数组必须来自控制器方法,例如:

public IActionResult AssignLoan()
    {

        EntityDetails entity = new EntityDetails();
        entity.Name = (from o in _context.EntityDetails
                       select o.Name).ToString();



        entity.Name.ToArray();
        ViewData["populatedropdown"] = entity;

        return View();
    }

并且必须将数组传递到_layout视图的此部分,并且必须将其设置为等于var国家。

  var countries = ["Slovakia", "Slovenia", "Solomon Islands", "Somalia", "South Africa"];

1 个答案:

答案 0 :(得分:2)

使用视图组件。将一个名为ViewComponents的文件夹添加到您的项目中,然后添加以下类。显然,将Foo更改为实际描述此功能的名称。

public class FooViewComponent : ViewComponent
{
    public async Task<IViewComponentResult> InvokeAsync()
    {
        var list = // get your list
        return View(list);
    }
}

然后,在Views\Shared\Components\Foo\Default.cshtml处添加一个视图。在其中,放入呈现您的HTML下拉列表。

最后,在您的布局中:

@await Component.InvokeAsync("Foo")

其中"Foo"是视图组件的名称减去ViewComponent部分。 View组件是可注入的,因此,如果您需要访问上下文或其他内容,则只需添加一个构造函数即可,将其作为参数接收,并将其分配给ivar,就像使用控制器一样。另外,可以根据需要向InvokeAsync传递参数。例如:

public async Task<IViewComponentResult> InvokeAsync(string foo)

然后:

@await Component.InvokeAsync("Foo", new { foo = "bar" })

更多信息可以在docs中找到。