【问题标题】:How to display data differently for different devices in MVC 5如何在 MVC 5 中为不同设备以不同方式显示数据
【发布时间】:2015-09-11 22:07:44
【问题描述】:

令人惊讶的是,经过多次搜索后,我找不到解决方案或类似问题,这可能是一个大脑放屁的时刻。我想使用媒体查询在不同设备上以不同方式显示数据。

所以在大型设备上我想以表格形式显示,在移动设备上显示一个自定义“listview”强>。

我可以通过在模型中创建 2 个循环来实现这一点,如下所示:

<div class="row display-large">
    <!--TABLE HERE-->
    @foreach (var emp in Model)
    <!--EACH ROW-->
</div>

<div class="row display-small">
    @foreach (var emp in Model)
    <!--EACH CUSTOM LIST ITEM-->
</div>

然后使用媒体查询,我可以显示/隐藏相关的查询(显示-小/大)。 但是我不能忍受自己这样做,它会增加页面大小并且只是非常糟糕的做法,所以我的问题是如何在不复制 HTML 的情况下实现这一点。

提前致谢。

【问题讨论】:

  • 也许我应该补充一点,布局之间的差异将包括移动设备上的有限功能和完全不同的布局,这就是为什么我不能只使用引导程序和“响应式”CSS 功能。

标签: html css asp.net-mvc-5


【解决方案1】:

也许你可以这样做:

在服务器端的某处创建全局变量,例如

public static class GlobalVars
{
     public static bool IsLarge {get; set;}
}

像这样添加到控制器中

[HttpPost]
public ActionResult SetDisplayMode(bool isLarge)
{
    GlobalVars.IsLarge = isLarge;
    return new HttpStatusCodeResult(System.Net.HttpStatusCode.OK);
}

在你看来添加:

<script>
 var data = $( window ).width() > 720)? true : false;
 $.post("@Url.Action("SetDisplayMode", "$ControllerNameHere")", { isLarge: data});     
</script>

<div class="row display-small">
    @foreach (var emp in Model)
    if(Web.GlobalVars.IsLarge) { <!--EACH ROW-->} else { <!--EACH CUSTOM LIST ITEM--> }
</div>

将 $ControllerNameHere 更改为您的控制器名称

【讨论】:

  • 我实际上是用其他属性来做这个的,“禁用”等,不敢相信它没有引起我的注意,打算用一些状态改变、重新调整大小等进行测试,看看会发生什么其他人说,如果它仍然是几个小时内的最佳解决方案,我会接受作为答案,非常感谢。
  • 这似乎是您可以在这里做的最简单的事情,但它应该可以工作
  • 不幸的是它不起作用,你怎么能从服务器端“检查显示大小”......你真的不能......
  • 更新了我的答案。试试这样的
猜你喜欢
  • 1970-01-01
  • 2019-01-22
  • 2018-06-16
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
相关资源
最近更新 更多