在 MVC 中使用复选框查询选定项

Query Selected Items using checkbox in MVC

我想问一下,在 MVC 中进行 linq 查询时,复选框中的 selected 项怎么可能被使用。 我有这个在我看来,我显示了所有可能的选项,用户只需 select 将用于生成报告的软件类型。

@using (Ajax.BeginForm("Create_Report", "Softwares",
            new AjaxOptions
            {
                HttpMethod = "POST",
                InsertionMode = InsertionMode.Replace,
                UpdateTargetId = "target2"
            })) 
        { 
            @Html.ValidationSummary(true)
             <p>For A Reports: Kindly check softwares to create reports.</p><br />
            foreach (var item in Model) { 
                <input type="checkbox" value="@item.software_name" name="software_type"/>@item.software_name
                <br />
            }


            <input type="submit" value="Create Report"/>

        }

之后,我希望在查询中使用 selected 软件类型,例如,如果用户 selects Adob​​e Pro、Adobe Illustrator、MS Visio 和 Acrobat,查询应该像 "Select from Software _table where software__type = "Adobe Pro" && software_type ="Adobe Illustrator && "so fort.

是否有任何方法可以使用复选框中的 selected 项来缩短查询?非常感谢任何帮助。

您需要定义一个集合来存储您选择的项目,并使用模型绑定将选择的项目映射到此 属性。

//store checked Items
public IEnumerable<string> SelectedSoftware { get; set; }
//check box list items
public List<string> SoftwareList = new List<string>();

 foreach (var item in Model.SoftwareList )
    {
        <input type="checkbox" name="SelectedSoftware" value="@item">@item

    }

在你的控制器中:

public ActionResult Create_Report(string[] SelectedSoftware)
    {
       //do action
    }

假设您的POST方法是

[HttpPost]
public ActionResult Create_Report(string[] software_type)

然后 software_type 将包含所选值的数组,因此您可以使用 .Contains() 来过滤查询

var items = db.Software.Where(s => software_type.Contains(s.software_type))

旁注:从您的属性中删除那些糟糕的下划线并遵循正常的命名约定(SoftwareType、SoftwareName 等或简单的 Type、Name 等,因为它们已经在 class 命名的软件中)