Javascript 如何在ASP.NET MVC中通过从数据库检索数据来选中/取消选中复选框列表

Javascript 如何在ASP.NET MVC中通过从数据库检索数据来选中/取消选中复选框列表,javascript,c#,html,asp.net-mvc,Javascript,C#,Html,Asp.net Mvc,我对ASP.NETMVC非常陌生,正在尝试制作一个项目跟踪工具。 我想在页面加载并正常工作时显示表中的问题列表 但是,当用户单击“选择类别名称”时,他应该会得到如上所述的所有问题,并在与特定类别相关的问题上打勾。到目前为止,我正在筛选并仅获得正确的筛选问题,但列表中应显示未选中的所有其他类别问题 我有一个问题表,类别和它们之间的一对多关系,因此我制作了一个名为QuestionCategoryMappingTable的映射表 我面临的问题是,我不知道如何先筛选所有问题,然后在用户从列表中选择时设置

我对ASP.NETMVC非常陌生,正在尝试制作一个项目跟踪工具。 我想在页面加载并正常工作时显示表中的问题列表

但是,当用户单击“选择类别名称”时,他应该会得到如上所述的所有问题,并在与特定类别相关的问题上打勾。到目前为止,我正在筛选并仅获得正确的筛选问题,但列表中应显示未选中的所有其他类别问题

我有一个问题表,类别和它们之间的一对多关系,因此我制作了一个名为QuestionCategoryMappingTable的映射表

我面临的问题是,我不知道如何先筛选所有问题,然后在用户从列表中选择时设置复选框。 我已经做了两个单独的功能都在工作,但我需要分开的功能一起

这是我的代码

// test code for partial view in project
    QuestionDataAccessLayer questionDataAccessLayer = new QuestionDataAccessLayer();

    //controller to add a partial view in create and edit question page
    public new PartialViewResult PartialView()
    {
        IEnumerable<Questions> questions = questionDataAccessLayer.GetAllQuestion();
        return PartialView("Partial_View", questions);
    }


    QuestionCategoryDataAccessLayer questionCategoryDataAccess = new QuestionCategoryDataAccessLayer();
    public new PartialViewResult PartialView1(int id)
    {
        IEnumerable<QuestionCategory> questionCategory = questionCategoryDataAccess.GetQuestionsPerCategory(id);
        return PartialView("Partial_View1", questionCategory);
    }
JavaScript、HTML文件如下所示:

//更新局部视图的代码 window.onload=函数{ $.ajax{ url:“PartialView”, 数据:{}, 键入:“Get”, 成功:功能反应{ $Questionpartial.htmlresponse } }; } //根据所选章节更新问题的代码 $body.onchange,Qpartial,function{ var CatgId=$Qpartial.val; $.ajax{ url:“PartialView1”, 数据:{id:CatgId}, 键入:“Get”, 成功:功能反应{ $Questionpartial.htmlresponse console.logCatgId; } } }; @模型IEnumerable @Html.DisplayNameFormodel=>model.Question @模型中的每个var项 { @*@Html.DisplayFormodelItem=>item.Question*@ @项目.问题 }
我不能评论,因为我缺乏声誉,所以假设中的一些自由将被接受,如果我做出错误的假设,我可以稍后编辑

据我所知,您希望向用户显示一个问题列表,并从下拉列表中选择与类别匹配的所有问题

如果可以从存储过程中更改返回类型,则可以使用一个sql函数返回问题以及是否应该检查该问题

CREATE procedure [dbo].[spGetAllMapping_Question_Category](@category_Id int)
as
Begin
SELECT
mpq.UID,mpq.Question_ID_FK_1,eq.Question ,mpq.Cat_ID_FK_2, ec.Description, mpq.Valid_From, 
mpq.Valid_To,c.Chapter_Name,
    CASE
        WHEN mpq.Cat_ID_FK_2 = @category_Id THEN 1
        ELSE 0
    END as 'Checked'

FROM 
EPQ2.Category ec,EPQ2.Questions eq, EPQ2.Mapping_Question_Category mpq, EPQ2.Chapter c

WHERE 
mpq.Question_ID_FK_1 = eq.Question_ID_PK
and mpq.Cat_ID_FK_2 = ec.Cat_ID_PK 
and c.Chapter_Id = eq.Chapter_Id 
order by c.Ch_Sequence_ID , eq.Sequence_ID,ec.Cat_Name

End
可以在questionCategoryDataAccess中将位值设置为布尔值。我知道有些读者有一个GetBoolean函数,或者你可以使用一些三元运算符

然后可以使用此布尔值设置复选框

@foreach (var item in Model)
{
    <tr>
        <td>
            @if (item.Checked == true)
            {
                <input name="AreChecked" type="checkbox" checked="checked" value="@item.Question" /> @item.Question<br />
            }
            else
            {
                <input name="AreChecked" type="checkbox" value="@item.Question" /> @item.Question<br />
            }
        </td>
    </tr>
}
使用Html助手可能更容易,但我遵循了您的标准


希望这能有所帮助,如果我做出了一些错误的假设,请告诉我,我会尽力帮助找到正确的解决方案。

当它们出现在屏幕上时,是全部被选中还是只是其中的一部分?@SimonPrice总共有12行,第一张图片显示全部12行,第二张只显示与所选类别相关的内容,哪一个是4,输出是正确的,但我想显示所有的12个问题,其中4个被选中,其他的应该只有一个复选框。因此,根据你的问题,其中一些应该被选中Hanks@EarthBound,我就是这样做的,忘了发布答案,但是的,它起了作用,谢谢你收到了