【问题标题】:Checkbox status in Razor pagesRazor 页面中的复选框状态
【发布时间】:2018-08-15 16:10:18
【问题描述】:

我将 MVC 与实体框架一起使用,我可以创建可能属于或不属于客户端的组。我这样做的方式是添加一个复选框,如果它为空(假)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 = "";
}

【问题讨论】:

    标签: c# razor model-view-controller asp.net-core-mvc asp.net-core-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中。

    【讨论】:

      【解决方案2】:

      会在 cmets 中回复,但我没有足够的声誉。这就是为什么要回答。

      由于 razor 页面上发生的一切都发生在服务器上,因此您可以在视图模型中执行此操作。如果您不想在 View Model 中执行此操作,或者您要从您的操作中直接发送数据访问模型。您可以在操作中修改该数据访问模型。

      但是,如果您出于任何原因想在 razor 页面上执行此操作。然后将此行放在您的 html 元素之前:

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

      假设 ClientId 是模型的一部分。

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2021-06-14
        • 2011-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多