如何在.Net Core中使用部分视图传递选择列表?

问题描述 投票:0回答:1

我已经为部分视图编写了一个操作,在其中调用选择列表,并在 _Layout.cshtml 中传递了相同的操作。 下拉菜单会在 Home/Index 操作上加载,但是当访问任何其他操作和控制器方法时,整个网站将停止工作。

家庭控制器操作

    public IActionResult Index()
{
    ViewBag.Proj = new SelectList(db.Projects.ToList(), "ProjectId", "ProjectName");
    return View();
}

_布局.cshtml

@await Html.PartialAsync("~/Views/Home/_partial.cshtml")

我正在尝试获取选择列表并将其传递到一个表单中,该表单在单击按钮时打开并放置在标题菜单上。

asp.net-core
1个回答
0
投票

根据你的描述,我建议你可以使用视图组件而不是使用部分视图。

视图组件可以直接注入服务以从数据库获取数据,并且可以将模型或视图包传递给组件视图,而无需传递所有控制器方法的所有数据。

更多关于如何使用它的细节,你可以参考下面的例子和这个链接

1.创建Component类:

public class ProjectDropdownViewComponent : ViewComponent
{
    public IViewComponentResult Invoke()
    {
        //you could modify the code to get the data from database
        List<Project> projects = new List<Project>() { new Project { ProjectId=1, ProjectName="test" }, new Project { ProjectName = "test2", ProjectId = 2 } };
        ViewBag.Proj = new SelectList(projects, "ProjectId", "ProjectName");

        return View();
    }
   
}

2.创建组件视图,路径如下:

请注意:视图组件视图路径需要匹配如下:

/Views/{Controller Name}/Components/{View Component Name}/{View Name}
/Views/Shared/Components/{View Component Name}/{View Name}
/Pages/Shared/Components/{View Component Name}/{View Name}
/Areas/{Area Name}/Views/Shared/Components/{View Component Name}/{View Name}

所以请创建如下路径的视图:

Views/Shared/Components/ProjectDropdown/Default.cshtml

查看代码:

<select asp-items="@ViewBag.Proj" class="form-control">
    <option value="">-- Select Project --</option>
    
</select>

3.在布局中调用:

            @await Component.InvokeAsync("ProjectDropdown")

            <a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">CoreMVC</a>

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.