Show/hide jQuery datatable action link button based upon column value

Viewed 172

My LINQ query for retrieving data:

public ActionResult GetRegFirmList()
        {
            try
            {
                var data = (from z in db.BusinessModels
                            select z).OrderByDescending(z => z.BusinessKey).ToList();
                return View(data);
            }
            catch (Exception ex) { throw; }
        }

I have two action link buttons in the jQuery datatable. I need to hide the button for Certificate if the value of Status is 1 in the particular row. The action link button for Application should not be hidden. How can I do that?

<link href="~/Content/DataTables/css/dataTables.bootstrap.min.css" rel="stylesheet" />
<table id="tblBusinessData">
    <thead class="table-success">
        <tr>
            <th>generate</th>
            <th style="visibility:hidden;">
                @Html.DisplayNameFor(model => model.BusinessKey)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.BusinessName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.PropName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Status)
            </th>
            
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.ActionLink("Certificate", "GenerateCertificate", new { id = item.BusinessKey }, new { @class = "btn btn-warning" })
                    @Html.ActionLink("Application", "GenerateApplication", new { id = item.BusinessKey }, new { @class = "btn btn-warning" })
                </td>
                <td style="visibility:hidden;">
                    @Html.DisplayFor(modelItem => item.BusinessKey)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.BusinessName)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.PropName)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Status)
                </td>
            </tr>
        }
    </tbody>
</table>
<script src="~/Scripts/DataTables/jquery.dataTables.min.js"></script>
<script src="~/Scripts/DataTables/dataTables.bootstrap.min.js"></script>
<script type="text/javascript">
    $('#tblBusinessData').DataTable({
        "columnDefs": [{
            "targets": [1],
            "visible": false
        }],
        "order": [
            [1, "desc"]
        ]
    });
</script>
1 Answers

You can add condition like this

@if(item.Status!=1)  
{
    @Html.ActionLink("Certificate", "GenerateCertificate", new { id = item.BusinessKey }, new { @class = "btn btn-warning" })
}

So your foreach loop should be like below

@foreach (var item in Model)
{
    <tr>
        <td>
            @(item.Status!=1){@Html.ActionLink("Certificate", "GenerateCertificate", new { id = item.BusinessKey }, new { @class = "btn btn-warning" })}
            @Html.ActionLink("Application", "GenerateApplication", new { id = item.BusinessKey }, new { @class = "btn btn-warning" })
        </td>
        <td style="visibility:hidden;">
            @Html.DisplayFor(modelItem => item.BusinessKey)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.BusinessName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.PropName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Status)
        </td>
    </tr>
}
Related