剃刀页面中的复选框状态

时间:2018-08-15 16:10:18

标签: c# razor model-view-controller asp.net-core-mvc asp.net-core-2.0

我正在将MVC与Entity Framework一起使用,并且可以创建可能属于或不属于客户端的组。如果它为空(false),则ClientId等于null时,将添加一个复选框。但是,如果选中(true),我希望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 = "";
}

2 个答案:

答案 0 :(得分:1)

由于您可以在客户端更改复选框的选中状态,因此如果必须更改输入字段的值,则需要使用JavaScript的某些客户端逻辑。

一种更灵活的方法是将复选框值和客户端ID都简单地传递回服务器,然后在其中运行逻辑,无论是否应使用客户端ID。

因此您的用户界面应如下所示:

<input type="checkbox" asp-for="IsClient" />

<!-- use a hidden input field to just transfer data -->
<input type="hidden" asp-for="ClientId" value="@ViewBag.ClientId" />

假设您的模型同时具有IsClientClientId属性。

然后在表单提交处理程序中,只需检查是否设置了IsClient。如果是,则可以使用ClientId,否则将其丢弃:

if (!model.IsClient)
{
    // clearing the client id
    model.ClientId = "";
}

当然,如果您可以在表单提交处理程序中确定ClientId,也可以在那里进行计算,而不必在呈现表单时将其放入ViewBag中。

答案 1 :(得分:0)

将在评论中回复,但我对此没有足够的声誉。那就是为什么回答。

由于剃须刀页面上发生的所有事情都在服务器上发生,因此您可以在视图模型中执行此操作。如果您不想在视图模型中执行此操作,或者直接从操作中发送数据访问模型。您可以在操作中修改该数据访问模型。

但是,无论出于何种原因,如果要在剃须刀页面上执行此操作。然后将此行放在您的html元素之前:

@{ Model.ClientId = Model.isClient == true ? ViewBag.ClientId : ""; }

假定ClientId是模型的一部分。

希望有帮助。