【问题标题】:Clickable button inside of a table表格内的可点击按钮
【发布时间】:2018-12-26 21:54:22
【问题描述】:

我正在编写员工信息复合列表的视图。该视图将显示诸如名字、姓氏、工作代码等信息……我的一个问题是我想让布尔单元格成为可点击的按钮。

例如:HasHealthcare 列将包含布尔值。

<thead>
<tr>
<th><label> FirstName</label></th>
<th><label> LastName</label></th>
<th><label> HasHealthcare</label></th>
</tr>
</thead>

<tbody>
@for (int i=0; i < Model.Employees.Count; i++)
{
<tr>
<td>@Model.Employees[i].FirstName</td>
<td>@Model.Employees[i].LastName</td>
<td>@Model.Employees[i].HasHealthcare</td>
</tr>
</tbody>

表:

First Name | Last Name | Has Healthcare

Bob        |  Smith    | True

我希望“True”成为一个可点击的按钮,这样如果我点击它,就会出现相反的布尔值。

【问题讨论】:

    标签: javascript c# jquery asp.net-mvc razor


    【解决方案1】:

    如果您不介意使用复选框,以下可能对您有用:

    <table>
         <thead>
                <tr>
                    <th><label> FirstName</label></th>
                    <th><label> LastName</label></th>
                    <th><label> HasHealthcare</label></th>
                </tr>
            </thead>
    
        <tbody>
            @for (int i = 0; i < Model.Employees.Count; i++)
            {
                <tr>
                    <td>@Model.Employees[i].FirstName</td>
                    <td>@Model.Employees[i].LastName</td>
                    <td>@Html.CheckBoxFor(x => x.Employees[i].HasHealthCare, false)</td>
                </tr>
            }
        </tbody>
    </table>
    

    【讨论】:

    • 我同意推荐使用 checkbox 而不是 button 来获得这种可用性。
    • 是的,我同意,我认为复选框会更好,如果他愿意,他可以使用 CSS 使它看起来像一个按钮。
    【解决方案2】:

    如果您需要在每次点击时自动保存,您可以使用如下所示的 Ajax 和 JQuery。您还需要一个匹配的 [HttPost] 操作方法。

    <thead>
    <tr>
    <th><label> FirstName</label></th>
    <th><label> LastName</label></th>
    <th><label> HasHealthcare</label></th>
    </tr>
    </thead>
    
    <tbody>
    @for (int i=0; i < Model.Employees.Count; i++)
    {
    <tr>
    <td>@Model.Employees[i].FirstName</td>
    <td>@Model.Employees[i].LastName</td>
    <td><a class="healthcare" data-id="@Model.Employees[i].Id" href="#">@Model.Employees[i].HasHealthcare</a></td>
    </tr>
    }
    </tbody>
    
    <script>
    $().ready(function(){
         $(".healthcare").click(function(){
          var element = this;
          $.ajax({
            type: "POST",
            url: url,
            data: {isHealthcare:$(element).text().toLowerCase()==='true', id:$(this).data("id") },
            success: function(result){
               $(element).text(result);
            },
            dataType: "json"
         });
       });
    })
    </script>
    

    【讨论】:

    • 多个具有相同 ID 的元素在不同浏览器之间会不一致,并且在其中任何一个上都无法正常工作。您应该改用类名。
    • 是的,谢谢,现在当然应该改课了。
    • 这就像一个魅力,但显示的值是“真”或“假”。你知道我怎样才能把“真”变成“真”吗?
    • 这很奇怪,我认为 C# 表示默认情况下应该是 True/False。这就是我首先使用 text().toLowerCase 的原因。否则类似: char.ToUpper(@...HasHealthcare.ToString()[0]) + @...HasHealthcare.ToString().Substring(1);
    • 如果它重新加载页面,它将正确显示。不过,上面的 JQuery 不需要重新加载整个页面。我的帖子向 JQuery 返回一个布尔值。不幸的是,上述方法都不起作用。
    猜你喜欢
    • 2014-01-14
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 2011-05-23
    • 2018-09-11
    • 1970-01-01
    相关资源
    最近更新 更多