代码之家  ›  专栏  ›  技术社区  ›  theJ

Razor页面中的复选框状态

  •  0
  • theJ  · 技术社区  · 6 年前

    <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页面内复选框的状态并设置ClientId的值?

    我想做一些类似下面的事情,然后把价值还原为客户的价值。

    @if (Model.isClient == true)
    {
        var value = ViewBag.ClientId;
    }
    else
    {
        var value = "";
    }
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   poke    6 年前

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

    然后在表单提交处理程序中,您只需检查 准备好了。如果是,您可以使用 客户

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

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

        2
  •  0
  •   Kamil Folwarczny    6 年前

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

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

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

    假设ClientId是模型的一部分。