如何解决如何将复选框值发布到将值保存到会话的控制器?
我在复选框单击上有以下代码,以获取复选框showHideDeletedRps
的复选框值并将true或false传递给控制器var rpInfo = await rpService.GetRPByID(id,showDeleted);
,我尝试了以下操作,但未保留所选内容值或复选框更改后不会更新。
如何使用会话应用相同的逻辑?
@{
var showDeleted = true;
if (Context.Request.HasFormContentType && Context.Request.Form.TryGetValue("showHideDeletedRps",out var formValue)
&& bool.TryParse(formValue,out var parsedFormValue))
{
showDeleted = parsedFormValue;
}
else if (Context.Request.Query.TryGetValue("showHideDeletedRps",out var queryValue)
&& bool.TryParse(queryValue,out var parsedQueryValue))
{
showDeleted = parsedQueryValue;
}
var id = Model.ID;
var rpInfo = await rpService.GetRPByID(id,showDeleted);// used dependency injection to populate fields in a View Component
}
我使用了此javascript代码
<script type="text/javascript">
$("select[autopostback=true],input[type=checkbox][autopostback=true],input[type=radio][autopostback=true]").on("change",function () {
$(this).closest("form").submit();
});
</script>
“更改中”复选框
<input autopostback="true" name="showHideDeletedRps" id="showHideDeletedRps" type="checkbox" value="true">
解决方法
如果只想在单击复选框时将复选框的值传递给控制器的某个动作,则可以通过以下表格直接实现:
@{
ViewData["Title"] = "Test";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<form asp-action="test" method="post">
<input autopostback="true" name="showHideDeletedRps" id="showHideDeletedRps" type="checkbox" value="true">
</form>
@section Scripts{
<script type="text/javascript">
if ('@ViewData["isChecked"]' == "True") {
$('#showHideDeletedRps').prop('checked',true);
} else {
$('#showHideDeletedRps').prop('checked',false);
}
$("select[autopostback=true],input[type=checkbox][autopostback=true],input[type=radio][autopostback=true]").on("change",function () {
$(this).closest("form").submit();
});
</script>
}
控制器:
[HttpPost]
public IActionResult Test(bool showHideDeletedRps)
{
ViewData["isChecked"] = showHideDeletedRps;
return View();
}
这是测试结果: