我正在将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 = "";
}
答案 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" />
假设您的模型同时具有IsClient
和ClientId
属性。
然后在表单提交处理程序中,只需检查是否设置了IsClient
。如果是,则可以使用ClientId
,否则将其丢弃:
if (!model.IsClient)
{
// clearing the client id
model.ClientId = "";
}
当然,如果您可以在表单提交处理程序中确定ClientId
,也可以在那里进行计算,而不必在呈现表单时将其放入ViewBag中。
答案 1 :(得分:0)
将在评论中回复,但我对此没有足够的声誉。那就是为什么回答。
由于剃须刀页面上发生的所有事情都在服务器上发生,因此您可以在视图模型中执行此操作。如果您不想在视图模型中执行此操作,或者直接从操作中发送数据访问模型。您可以在操作中修改该数据访问模型。
但是,无论出于何种原因,如果要在剃须刀页面上执行此操作。然后将此行放在您的html元素之前:
@{ Model.ClientId = Model.isClient == true ? ViewBag.ClientId : ""; }
假定ClientId是模型的一部分。
希望有帮助。