首页 > 解决方案 > 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 = "";
}

标签: c#razormodel-view-controllerasp.net-core-mvcasp.net-core-2.0

解决方案


由于您可以在客户端更改复选框的选中状态,因此如果必须更改输入字段的值,则需要使用 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 中。


推荐阅读