Asp.net mvc 如何在ASP.net内核中进行复选框控制

Asp.net mvc 如何在ASP.net内核中进行复选框控制,asp.net-mvc,asp.net-core-mvc,Asp.net Mvc,Asp.net Core Mvc,Checbox不影响模型,它始终是默认值。可能复选框正好返回。但我尝试了javascript+额外的一个输入,效果很好。我不想使用javascirpt控件 //Part of View <div class="checkbox"> <label id="sendEmail" class="" > <input id="sendEmailInput" type="checkbox" asp-for="CompanySet

Checbox不影响模型,它始终是默认值。可能复选框正好返回。但我尝试了javascript+额外的一个输入,效果很好。我不想使用javascirpt控件

//Part of View
    <div class="checkbox">
        <label id="sendEmail" class="" >
            <input id="sendEmailInput" type="checkbox" asp-for="CompanySetting.SendEmail">Send mail for jobs.
        </label>
    </div>


//Model
    public partial class CompanySetting
    {
        public int CompanyId { get; set; }
        public bool SendEmail { get; set; }

        public virtual CompanyUsers Company { get; set; }
    }
//Controller
    public ActionResult AccountSettingSave(CompanyAccountViewModel model)
    {
        try
        {
            CompanySetting settingModel = _companySettingService.GetByCompanyId(GetId());
            settingModel.SendEmail = model.CompanySetting.SendEmail;
            _companySettingService.UpdateBill(settingModel);
            TempDataMessage("message", "Hesap ayarları başarıyla güncellendi.");
            return RedirectToAction("AccountSettings");
        }
        catch
        {
            TempDataMessage("message", "Hesap ayarları güncellenemedi.");
            return RedirectToAction("AccountSettings");
        }

    }

这个代码有效。我应该使用它吗?

这是因为当选中/取消选中复选框时,属性“值”没有改变,而是改变了“数据值”。这就是更改不绑定到模型的原因

你可以利用你的变通方法。我使用了下面更简单的解决方案,它通过javascript将数据val的属性值转换为值

<div class="checkbox">
    <input id="sendMail" type="text" asp-for="CompanySetting.SendEmail" style="display: none" />
    <label id="sendMailLabel"><input  type="checkbox">Send Mail for Jobs</label>
</div>

if ($('#sendMail').val() == 'True') {
    $('#sendMailLabel').addClass('checked');
} else {
    $('#sendMailLabel').removeClass('checked');
}
$('#sendMailLabel').on('change', function () {
    if ($('#sendMailLabel').hasClass('checked')) {
        $('#sendMail').val('True');
    } else {
        $('#sendMail').val('False');
    }
});

在我看来,这是一个很好的复选框。请说得更准确些。什么不起作用?它不会渲染吗?is是否不向控制器传递信息?您是否收到例外情况?@Marco抱歉,此复选框不影响Model.CompanySetting.sendmail。它始终是默认值。请向我们显示您的型号、控制器和视图。我们需要一个可验证的示例作为提示:如果您有一个特定模型的控制器操作。让VisualStudio为您做最重要的工作,并在操作方法上单击鼠标右键并选择“添加视图”,构建视图bx。虽然这不会有你需要的样式,但它至少给了你一个工作的起点seconds@Marco编辑并回答了一个解决方案。你能检查一下答案吗?
<input asp-for="@Model.sendMail" type="checkbox" value="@Model.sendMail" />&nbsp;Approve?

<script>
$('#sendMail').on('change', function () {
   $('#sendMail').val($('#sendMail').attr('data-val'));
});
</script>