c# - Razor 页面中的复选框状态
问题描述
我将 MVC 与实体框架一起使用,我可以创建可能属于或不属于客户端的组。我这样做的方式是添加一个复选框,如果它为空(假)ClientId 等于 null。但是,如果它被选中(真),我希望 ClientId 等于我在控制器中设置的 ViewBag。
<div class="form-group">
<label asp-for="isClient">Client Specific
<input type="checkbox" asp-for="isClient"/>
</label>
</div>
<div class="form-group" id="ClientId" style="display:none;">
<label asp-for="ClientId" class="control-label">Client Name</label>
<input asp-for="ClientId" class="form-control" value="">
<span asp-validation-for="ClientId" class="text-danger"></span>
</div>
有没有办法可以检查 Razor 页面内 CheckBox 的状态并设置 ClientId 的值?
我正在考虑做类似下面的事情,然后将值返回到 ClientId 的值。
@if (Model.isClient == true)
{
var value = ViewBag.ClientId;
}
else
{
var value = "";
}
解决方案
由于您可以在客户端更改复选框的选中状态,因此如果必须更改输入字段的值,则需要使用 JavaScript 进行一些客户端逻辑。
一种更灵活的方法是简单地将复选框值和客户端 ID 传递回服务器,然后让逻辑在那里运行,无论是否应该使用客户端 ID。
所以你的 UI 看起来像这样:
<input type="checkbox" asp-for="IsClient" />
<!-- use a hidden input field to just transfer data -->
<input type="hidden" asp-for="ClientId" value="@ViewBag.ClientId" />
假设您的模型同时具有 anIsClient
和 aClientId
属性。
然后在您的表单提交处理程序中,您只需检查是否IsClient
已设置。如果是,您可以使用ClientId
,否则只需丢弃它:
if (!model.IsClient)
{
// clearing the client id
model.ClientId = "";
}
当然,如果你可以确定ClientId
表单提交处理程序,你也可以在那里计算,而不必在表单渲染时将其放入 ViewBag 中。
推荐阅读
- python - document.querySelector().click(); 硒不起作用 $0.click(); 不明确的
- c# - 启用屏幕保护程序时忽略第一个触摸事件 - Windows
- python - 带有请求的 Python - 403 - 访问被拒绝
- reporting-services - 上一财政年度 - SSRS 的参数表达式
- conda - 如何追溯用于在snakemake工作流程中生成结果文件的确切软件版本
- python - 填充一个空的多维矩阵
- magento2 - 无法在 Centos7 上安装 magento2.4 rom 命令行
- django - Google Cloud Run 中的 Django 找不到 /cloudsql 套接字
- api - 学习路径中模块之间的 Opigno 链接
- java - Hazelcast addItemListener 与弹簧自动装配