在 ASP.Net Core 中使用 AJAX 将复选框列表类的值发送到服务器

Posted

技术标签:

【中文标题】在 ASP.Net Core 中使用 AJAX 将复选框列表类的值发送到服务器【英文标题】:To send values of a checkbox list class to the server using AJAX in ASP.Net Core 【发布时间】:2021-09-02 05:27:36 【问题描述】:

我有以下复选框列表的模型代码。

public class ReportViewModel
        
    public List<Guid> Reports  get; set; 
    public SelectList ReportList  get; set; 
    public List<CheckBoxResponse> Status  get; set; 


public class CheckBoxResponse

    public string ItemText  get; set; 
    public bool Selected  get; set; 

这是我的看法:

<form id="frmReport">

    <div class="row">
        <div class="col-xs-12">
            <div class="form-group">
                <label asp-for="Reports"></label><br />
                <select asp-for="Reports" asp-items="Model.ReportList" class="form-control" multiple></select>
            </div>
        </div>
    <div class="row">
        <div class="col-xs-12">                
                <label>Status</label> <br />
                @for (var i = 0; i < Model.Status.Count; i++)
                                        
                    <input type="checkbox" asp-for="@Model.Status [i].Selected" />
                    <label asp-for="@Model.Status[i].Selected"> @Model.Status[i].ItemText</label>
                    <input type="hidden" asp-for="@Model.Status[i].ItemText" />
                
        </div>
    </div>


    <div class="row">
        <div class="col-xs-12" style="padding-top: 10px; padding-bottom: 10px;">
            <a id="submit" class="btn btn-primary" title="Submit">Submit</a>
        </div>
    </div>
</form>

复选框列表中有 3 个值,因此有 3 个复选框。我现在需要使用 jquery 在单击按钮时将值传递给服务器。这是我的代码:

$(document).on('click', '#submit', function (e) 
    
    var reports = $("#Reports").find("option:selected").val();
    
    //Need to add checkbox class to submit to the server

    var model = 
        Reports : reports,
        Status : ?? 
    

我需要通过将复选框列表添加到模型中来将其发送到服务器。我该怎么做?

【问题讨论】:

【参考方案1】:

你可以把复选框放在一个表单上(不是嵌套的,如果可以的话就用一个表单),然后序列化表单并提交数据。

【讨论】:

【参考方案2】:

您想将值发送到服务器吗?然后你应该为输入添加值,并创建一个

数组来存储选定的值然后传递它们,检查这个:

 @for (var i = 0; i < Model.Status.Count; i++)
            
                <input type="checkbox" asp-for="@Model.Status[i].Selected" value="@Model.Status[i].ItemText"/>
                <label asp-for="@Model.Status[i].Selected">@Model.Status[i].ItemText</label>
                <input type="hidden" asp-for="@Model.Status[i].ItemText" />
            

jquery:

$(document).ready(function () 
        $('#submit').click(function () 
            var selected = [];   //array to store
            $('input:checked').each(function () 
                selected.push($(this).attr("value"));  //push value to array
            );
            $.ajax(
                type: "POST",
                url: '@Url.Action("Test", "Home")',                  
                data:  Selecteditem: selected      //pass as string
            );
    );
);

服务器:

 public IActionResult Test(List<string> Selecteditem)

结果:

【讨论】:

以上是关于在 ASP.Net Core 中使用 AJAX 将复选框列表类的值发送到服务器的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET Core 中使用 ajax 向控制器发送数据

在 ASP.NET CORE 表单中使用 AJAX 返回 JSON

在 Asp.net Core 中使用 Ajax 的验证表单

ASP.NET Core - 在没有 Ajax 的 javascript 中调用控制器方法

在 Razor 视图中使用 Ajax 进行 Asp.Net Core 表分页

如何将 Microsoft.jQuery.Unobtrusive.Ajax 与 libman(库管理器)asp.net Core 2.1 一起使用?