C# 复选框(型号)在选中时不更改值

C# 复选框(型号)在选中时不更改值,c#,javascript,jquery,asp.net-mvc,razor,C#,Javascript,Jquery,Asp.net Mvc,Razor,我在视图中做了一些复选框。复选框是通过具有bool属性的ViewModel实现的。我当前正在尝试将控制器中的查询更改为日期或月份,具体取决于是否选中了复选框。然而,在控制器中,它总是跳转到else语句,即使已检查了月份。月总是假的 我怀疑JavaScript代码可能是错误的 此用户界面: 在我的控制器方法中,我尝试执行以下操作: 控制器: 在视图中,我实现了我的Viewmodel,并尝试编写一些javascript检查是否选中了什么复选框以及是否返回true或false: 视图: 控制器中的if

我在视图中做了一些复选框。复选框是通过具有bool属性的ViewModel实现的。我当前正在尝试将控制器中的查询更改为日期或月份,具体取决于是否选中了复选框。然而,在控制器中,它总是跳转到else语句,即使已检查了月份。月总是假的

我怀疑JavaScript代码可能是错误的

此用户界面:

在我的控制器方法中,我尝试执行以下操作:

控制器:

在视图中,我实现了我的Viewmodel,并尝试编写一些javascript检查是否选中了什么复选框以及是否返回true或false:

视图:

控制器中的if语句的运行似乎取决于我在视图中选择的内容


注意:我没有使用httpPost/get,因为数据是用Google图表加载的,我不希望每次选择新请求时都重新加载整个页面。

是因为您在月份设置了bool字段,所以复选框会将其呈现为true/false。您可以查看月份呈现的HTML复选框。无论您是否选中,数据仍然会以true/false的形式发送回服务器,这取决于呈现页面时设置的内容。这个值永远不会改变

因此,我建议您在viewmodel中再添加一个属性以保持try-check/unchecked状态,并在视图中将其呈现为隐藏字段,并在勾选/取消勾选复选框时更新此隐藏字段

或者月份字段呈现为隐藏字段,并在页面中添加一个以上复选框,以在选中/取消选中复选框时更新月份字段

假设我们使用第二种方法,代码看起来像这样,我没有测试下面的代码。我希望这有助于:

@Html.CheckBox("chkMonth", new { @onclick = "updatemyhidden(this)" })
@Html.HiddenFor(model => model.Month)

<script type="text/javascript">
    function updatemyhidden(chkbox) {
        $("#Month").val(chkbox.checked);

    }
</script>

好的。你的意思是像bool MonthChecked=true和bool Month Unchecked=False。这将导致视图中出现两个复选框-model.MonthChecked和model.MonthUnchecked。这就是你的意思吗?哪一个应该隐藏?谢谢,我也更新了我的帖子,试图缩小代码的规模,让每月的工作第一。然而,月份似乎没有得到验证,在控制器中,它也会跳转到else语句并向请求添加日期。我已将验证代码移动到该按钮。单击该按钮后,它将进行验证,此后,我仍将使用if/else stamenets检查是否选中该复选框,并返回月或日期字符串格式,但它无法工作。我一定做错了什么?你是说隐藏域月还没有更新吗?你们能用fiddler来检查发送回服务器的值吗?或者你也可以在firebug或google chrome控制台上进行检查,确保在点击提交按钮之前在隐藏字段中更新了该文件
    <table class="adminContent">
             <tr>
                <td class="adminTitle">
                    @Html.NopLabelFor(model => model.StartDate): 
                </td>
                <td class="adminData">
                    @Html.EditorFor(model => model.StartDate)
                </td>
            </tr>
            <tr>
                <td class="adminTitle">
                    @Html.NopLabelFor(model => model.EndDate):
                </td>
                <td class="adminData">
                    @Html.EditorFor(model => model.EndDate)
                </td>
            </tr>
          <tr>
            <td class="data" colspan="2">
                @Html.CheckBoxFor(model => model.Date, new { id = "Day" }) // -- Checkbox Date
                @Html.LabelFor(model => model.Date)
            </td>
            </tr>
         <tr>
             <tr>
        <td class="data" colspan="2">
                @Html.CheckBox("chkMonth", new { @onclick = "updatemyhidden(this)" }) // -- Checkbox Month
                @Html.HiddenFor(model => model.Month, new { id = "Month" })
                @Html.LabelFor(model => model.Month)           
        </td>
    </tr>
        </tr>
            <tr>
                <td class="adminTitle">
                    @Html.NopLabelFor(model => model.GAStatisticsId ):
                </td>
                <td class="adminData">
                    @Html.DropDownList("GAStatisticsId", Model.AvailableGAStatistics)
                    <input type="button" id="GAStatisticsReport-Submit" class="t-button" value="@T("Admin.Common.Search")" />
            </tr>
    </table>


    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript" src="/Scripts/jquery.min.js"></script>
    <script type="text/javascript">
 $("#GAStatisticsReport-Submit").click(function () {

        if ($("select[name='GAStatisticsId'] option:selected").text() == "Visitors Report")
            drawChartVisitors()

        if ($("select[name='GAStatisticsId'] option:selected").text() == "Orders Report")
            drawChartOrders()

        if ($("select[name='GAStatisticsId'] option:selected").text() == "Conversion Report")
            drawConversion()

        function updatemyhidden(chkbox) {
            $("#Month").val(chkbox.checked);

        }

    })
    google.load("visualization", "1", { packages: ["corechart"] });
    google.load("visualization", "1", { packages: ["treemap"] });
    function drawChartVisitors() {
        $.get('/GAStatistics/GetVisitors', {
            StartDate: $('#@Html.FieldIdFor(model => model.StartDate)').val(),
            EndDate: $('#@Html.FieldIdFor(model => model.EndDate)').val(),



        },
            function (data) {
                var tdata = new google.visualization.DataTable();

                tdata.addColumn('date', 'Date');
                tdata.addColumn('number', 'Visitors');

                for (var i = 0; i < data.length; i++) {


                    if ($("#Month").is(":checked")) {


                        var dateStr = data[i].Date.substr(0, 4);
                    }



                    else {

                        var dateStr = data[i].Date.substr(0, 4) + "-" + data[i].Date.substr(4, 2) + "-" + data[i].Date.substr(6, 2);
                    }


                    tdata.addRow([new Date(dateStr), parseInt(data[i].Visitors)]);
                }
@Html.CheckBox("chkMonth", new { @onclick = "updatemyhidden(this)" })
@Html.HiddenFor(model => model.Month)

<script type="text/javascript">
    function updatemyhidden(chkbox) {
        $("#Month").val(chkbox.checked);

    }
</script>