【问题标题】:how i can hide a specific asp.net WebGridColumn/s using hidden-phone Bootstrap class我如何使用隐藏电话引导类隐藏特定的 asp.net WebGridColumn/s
【发布时间】:2016-09-17 16:39:04
【问题描述】:

我正在开发一个 asp.net mvc-4 Web 应用程序。在我的视图中,我的 Razor 视图中有以下 WebGrid:-

@{
var gridcolumns = new List<WebGridColumn>();

                gridcolumns.Add(new WebGridColumn()
               {
                  ColumnName="OrderID",
                   Header = "",
                   Style="hidden-phone",
                   CanSort = false,
                   Format =

                @<text>

             @Html.ActionLink("Edit","Edit", "Order",new { id = item.OrderID },null)

                </text>
               });

//other columns goes here..
var grid = new WebGrid(
                canPage: true,
                rowsPerPage: Model.PageSize,
                canSort: true,
                ajaxUpdateContainerId: "grid");

                grid.Bind(Model.Content, rowCount: Model.TotalRecords, autoSortAndPage: false);
                grid.Pager(WebGridPagerModes.All);

                @grid.GetHtml(htmlAttributes: new { id = "grid" },   // id for ajaxUpdateContainerId parameter
         fillEmptyRows: false,
         tableStyle: "table table-bordered table-hover",


         mode: WebGridPagerModes.All,
         columns: gridcolumns

         );


}

现在我想在小型设备上隐藏特定的 WebGridColumns。所以我在 web 网格中定义了以下内容,如上面的代码所示:-

Style="hidden-phone",

现在这将在小型设备(电话)中隐藏列内容,但仍会显示列标题。当我在小屏幕(电话)上查看 WebGrid 时,与正文列相比,我最终拥有不同数量的标题。

所以任何人都可以告诉我如何强制Style="hidden-phone" 应用于列内容和列标题。换句话说,当我在小尺寸屏幕中查看我的 WebGrid 时隐藏指定的列/s?好像 WebGrid 的 Style 属性不会应用于指定的列标题?

【问题讨论】:

  • 您使用的是哪个版本的引导程序? ,你能发布你的视图生成的HTML吗?
  • @joint_ops 我正在使用引导程序版本 2
  • 您是否尝试使用“hiden-phone”类将部分代码包装在 div 中?像这样:
    @your razor markup

标签: css asp.net .net razor webgrid


【解决方案1】:

最简单的解决方案是完全隐藏标题:

displayHeader:false

这是 WebGrid 对象的选项,但如果您需要它,唯一的解决方案是按单元格编号隐藏列标题:

$(function () {
    $('#grid thead tr th:eq(0)').addClass('hidden-phone');
})

更新

好的,假设您像示例中一样添加到列类 hidden-phone 然后您可以找到相应的标题:

$(function () {
    $('#grid tbody tr:first td.hidden-phone').each(function(index, td){  
       $('#grid thead tr th:eq(' + index + ')').addClass('hidden-phone');
    });
})

提供的函数将查看表格的第一行并搜索具有隐藏电话类的单元格。然后对于每个单元格,它将向其相应的标题添加相同的类。

更新 #2

如果您使用 ajax 分页和排序,那么您需要稍微修改我的示例。首先将我的 js 代码移动到单独的函数中:

function hideHeaders() {
    $('#grid tbody tr:first td.hidden-phone').each(function (index, td) {
        $('#grid thead tr th:eq(' + index + ')').addClass('hidden-phone');
    });
};

$(function () {
    hideHeaders();
})

然后将该函数名作为回调传递给 ajax 请求:

var grid = new WebGrid(
    canPage: true,
    rowsPerPage: 1,
    canSort: true,
    ajaxUpdateContainerId: "grid",
    ajaxUpdateCallback: "hideHeaders");

注意 ajaxUpdateCallback: "hideHeaders" - 它现在让 WebGrid 在 ajax 请求完成后需要调用哪个函数。

【讨论】:

  • 我从来没有想过这种方法。但我不确定是否可以通过定义 标签而不是 单元格编号来修改脚本。现在 webgrid 将呈现 th 如下:- Address 。所以我可以定义脚本来删除其中包含单词 Address 的 。因为我在许多位置渲染了相同的网络网格,并且网络网格包含不同数量的标题。所以根据单元格编号删除将不允许我为网络网格定义全局脚本
  • @johnG 好的,我已经更新了我的答案。希望它能让您更接近满足您需求的解决方案。
  • 现在我尝试了您的脚本如下:- $(function () { $("#grid tbody tr:first td.hidden-phone").each(function(index, td) { alert (1); $("#grid thead tr th:eq(' + index + )'").addClass("hidden-phone"); }); }) .. 但它没有应用 hidden-phone 类..我故意添加一个alter(1);但是这个警报只运行一次..如果我将警报定义为跟随警报(索引)我将得到未定义的内容,所以脚本似乎没有按照你提到的方式工作..
  • @johnG 现在试试,我打错字了,所以脚本中缺少一个 ' 字符。
  • 现在你的脚本可以很好地工作,仅隐藏相关的 。但我面临的问题是网络网格生成的表格不会扩展以占据隐藏列,因此网络网格在手机屏幕内不会有更好的用户体验,因为隐藏列只会被空白区域替换.. 我还面临另一个问题是,每当我执行 ajaxsort 或 ajax 分页时,隐藏的列都会再次出现!!所以我需要保持脚本正常工作
【解决方案2】:

我做了一个代码sn-p请检查一下。

我已禁用表格的完整第 3 列。

我想它会对你有所帮助。

谢谢

$(function () {
  debugger;
  $('#grid tr').each(function(){ 
    $(this).find('th:eq(2)').hide();
  $(this).find('td:eq(2)').hide();
    });
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="grid">
  <tr>
    <th>H1</th>
    <th>H2</th>
    <th>H3</th>
    <th>H4</th>
  </tr>
  <tr>
    <td>d1</td>
    <td>d2</td>
    <td>d3</td>
    <td>d4</td>
  </tr>
  <tr>
    <td>d1</td>
    <td>d2</td>
    <td>d3</td>
    <td>d4</td>
  </tr>
  <tr>
    <td>d1</td>
    <td>d2</td>
    <td>d3</td>
    <td>d4</td>
  </tr>
  <tr>
    <td>d1</td>
    <td>d2</td>
    <td>d3</td>
    <td>d4</td>
  </tr>
  <tr>
    <td>d1</td>
    <td>d2</td>
    <td>d3</td>
    <td>d4</td>
  </tr>
</table>

【讨论】:

  • 好的,谢谢,但我可以修改脚本以在标题包含某些文本的列上运行,而不是在列位置上回复.. 目前 asp.net 网络网格会将标题呈现为遵循:- 地址 ..同样在您的代码中,它总是会隐藏实际的列,而在我的情况下,只有当屏幕太小时我才需要隐藏列,这可以通过添加“隐藏电话”引导类来完成..
  • 是的,我们可以做到。如果您要求根据屏幕分辨率隐藏列。这是可能的,如果您根据标题文本列询问应该隐藏,那也是可能的。只要告诉我确切的事情,我就会根据它来编写代码。如果你愿意,请告诉我
  • 现在我已经在原始问题中解释了我想要的内容。我想要做的是在小尺寸屏幕上查看网络网格时隐藏特定的网络网格列。现在,当我在 webgeid 列“Style="hidden-phone"”中定义以下引导类时,它只会隐藏表格主体内的相关列,但相关标题将继续显示在小尺寸屏幕上。等等,另一个答案 Lesiman 提供了一个脚本,它将动态地将“隐藏电话”引导类应用于相关的表头。
  • 所以现在我可以在小尺寸屏幕上隐藏表格标题和表格正文中的相关列.. 但现在我面临的另一个问题是网络网格没有扩展到占据释放的空间,所以我实际上所做的是在小尺寸屏幕上隐藏列,但可见列没有扩展以占用释放的空间..
猜你喜欢
相关资源
最近更新 更多
热门标签