【问题标题】:ASP.NET Core: I want to have access to the list of checkboxes (value) from my view on my controller's methodASP.NET Core:我想从我对控制器方法的视图中访问复选框(值)列表
【发布时间】:2021-04-01 17:13:02
【问题描述】:

在我看来,我有类似这样的标记:

@model C.Models.CM
<div class="row">
    <div class="col-md-4">
        <form asp-action="Create">
            <div class="form-group">
                <label asp-for="Date" class="control-label"></label>
                <input asp-for="Date" class="form-control" />
                <span asp-validation-for="Date" class="text-danger"></span>
            </div>

            <div class="row">
                <select data-placeholder="Select Item" asp-for="IdItem" class="form-control" asp-items="ViewBag.Items"></select>
            </div>

            <div class="form-group">
                <input id="cboAll" type="checkbox" value="CheckAll / unCheck" /> All<br />
                @foreach (var cdos in ViewBag.Modelon.Cdos)
                { 
                    <input id=@cdos.Id type="checkbox" value=@cdos.Id class="w3-check" />@cdos.Name<br />
                }
            </div>

            <div class="form-group">
                <input id="cboAll" type="checkbox" value="CheckAll / unCheck" /> All<br />
                @foreach (var ctres in ViewBag.Modelon.Ctres)
                {
                    <input id=@ctres.Id type="checkbox" value=@ctres.Id class="w3-check" />@ctres.Name<br />
                }
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

这里要理解的重要一点是,除了视图中的其他附加信息之外,此标记生成一个CheckBox 的数字 N,这取决于插入数据库中的数据。

视图如下所示:

My View

所以,正如您所见,CheckBox 的数量从 1 变为 N。

我的问题如下,我无法理解如何在我的控制器中获取 CheckBox 组数据。我什至不知道这些信息是否真的被发送到控制器。

我的控制器中有以下代码:

    public async Task<IActionResult> Create(List<string> slct)
    {
        System.Diagnostics.Debug.WriteLine("test");

        foreach (string value in slct)
        {
            System.Diagnostics.Debug.WriteLine(value);
        };

        System.Diagnostics.Debug.WriteLine("test");

        return RedirectToAction(nameof(Index));
    } 

我希望我的代码根据来自复选框的信息执行某些操作,现在我试图查看视图中的所有数据是否作为选择列表发送,但这不是情况,因为这段代码在调试屏幕中除了“测试”之外不打印任何内容。

我做了研究,人们推荐了以下链接来学习如何在控制器中加载相关数据。

https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/read-related-data?view=aspnetcore-5.0

https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/update-related-data?view=aspnetcore-5.0

问题是,无论我阅读了多少教程,我都无法理解它们或解决如何将它们应用到我的案例中,因为它们适用于一个更复杂的示例,而且我需要的代码使用的类型是

await _context.Model.Include(a => a.Thing1)
                    .Include(b => b.Thing2) 
                    .ThenInclude(c => c.Whatiscwhatisbwat??)

当然没有帮助(该代码的编写让我非常困惑,我无法理解它的作用)。

那么,好的,有人可以帮助我提供比教程中的解释更简单的解释来解决这个问题吗?在我从控制器提到的方法中,我想以任何格式(如列表、数组等)从视图访问两组复选框及其选择的值,我知道我必须实现一个包含代码,但我不知道该怎么做,或者是否有更简单的解决方案。

【问题讨论】:

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


    【解决方案1】:

    我想从视图中访问两组复选框及其选择的值

    请注意,您没有为这些复选框输入指定name 属性,这将导致所有选中的值都不会发布到服务器端。

    为了实现您的上述要求,您可以修改如下代码。

    为复选框指定 name 属性

    <div class="form-group">
        <input id="cboAll" type="checkbox" value="CheckAll / unCheck" /> All<br />
        @foreach (var cdos in ViewBag.Modelon.Cdos)
        {
            <input id=@cdos.Id type="checkbox" name="selectedCdos" value=@cdos.Id class="w3-check" />@cdos.Name<br />
        }
    </div>
    
    <div class="form-group">
        <input id="cboAll" type="checkbox" value="CheckAll / unCheck" /> All<br />
        @foreach (var ctres in ViewBag.Modelon.Ctres)
        {
            <input id=@ctres.Id type="checkbox" name="selectedCtres" value=@ctres.Id class="w3-check" />@ctres.Name<br />
        }
    </div>
    

    接受检查值作为参数的操作方法

    public async Task<IActionResult> Create(ModelOfCheckedVals slct)
    {
        //...
        //code logic here
        //...
    

    模型类ModelOfCheckedVals

    public class ModelOfCheckedVals
    {
        public List<int> selectedCdos { get; set; }
        public List<int> selectedCtres { get; set; }
    }
    

    测试结果

    【讨论】:

    • 非常感谢!!!这正是我所需要的,这样我就能够解决我的问题并让我的代码正常工作(:
    猜你喜欢
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多