MVC4可不可以把网页做成pc客户端移动设备和普通pc浏览

MVC4+iis发布网站后本地浏览器可以看,其他电脑打不开网址
[问题点数:40分,结帖人u]
MVC4+iis发布网站后本地浏览器可以看,其他电脑打不开网址
[问题点数:40分,结帖人u]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|mvc4如何判断是PC访问还是手机访问_百度知道
mvc4如何判断是PC访问还是手机访问
我有更好的答案
如news、product,都会用Request.Browser.IsMobileDevice这个方法去判断选择PC View 或 Mobile View,因为调用的数据都一样,只是页面展示不同。所以在MVC中,这个方法是肯定可以使用的,再一个,这个方法其实就是取的useragent
采纳率:89%
来自团队:
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。51CTO旗下网站
【博文推荐】ASP.NET MVC4+BootStrap实战
好久没有写关于web开发的文章了,进到这个公司一直就是winform和Silverlight,实在是没有实战web项目的机会。大D也辞职了,去搞web app了。自己也该闲暇时间多学习学习,每天进步一点点。
作者:BruceAndLee来源:51CTO博客| 10:23
本博文出自51CTO博客博主,有任何问题请进入博主页面互动讨论!
博文地址:
OK,不多说了,看一下Solution的截图
基本上一看就明白了,控制器调用Biz层,Biz层调用DAL层,DAL层进行数据的CURD。Utility是一些公用的类库。ok,为什么程序集的命名都是以Bruce开头呢,因为我在公司的英文名叫这个。废话不多说,我们先看一下页面
我们引入了BootStrap,主要是为了页面布局。在Views中Partial下面放的都是部分页。
我们先看一下运行效果,今天主要是讲页面初始化部分。
其实查询条件就是婚否,出生日期,姓名的模糊查询。我们先看一下页面Index.cshtml的代码
&!DOCTYPE&html&&&html&&&head&&&&&&&meta&charset=&utf-8&&/&&&&&&&meta&http-equiv=&X-UA-Compatible&&content=&IE=edge&&/&&&&&&&meta&name=&viewport&&content=&width=device-initial-scale=1&&/&&&&&&&title&Compare&data&between&Solr&and&DB&/title&&&&&&&link&rel=&stylesheet&&type=&text/css&&href=&~/BootStrap/css/bootstrap-theme.css&&/&&&&&&&link&rel=&stylesheet&&type=&text/css&&href=&~/BootStrap/css/bootstrap.css&&/&&&&&&&&&&&&@*@Styles.Render(&~/css&)*@&&&&&&&&&&&@Scripts.Render(&~/bundles/BootStrap&)&&&&&&&&&&&@Scripts.Render(&~/bundles/Scripts&)&&&&&&style&type=&text/css&&&&&&&&&&&.pre-Scrollable&{&&&&&&&&&&&&&max-height:&700&&&&&&&&&&&&&overflow-y:&&&&&&&&&&}&&&&&&/style&&&/head&&&body&&&&&&&div&class=&container&&&&&&&&&&&&form&id=&formsync&&&&&&&&&&&&&&&&div&class=&row&&&&&&&&&&&&&&&&&&&&div&class=&col-md-12&&&&&&&&&&&&&&&&&&&&&&&&h1&style=&color:red&&&b&Compare&Data&Between&Solr&and&DB&/b&&/h1&&&&&&&&&&&&&&&&&&&/div&&&&&&&&&&&&&&&/div&&&&&&&&&&&&&&&div&class=&row&&id=&divloding&&style=&display:text-align:center&&&&&&&&&&&&&&&&&&&&div&class=&col-md-6&&&&&&&&&&&&&&&&&&&&&&&&img&src=&~/Images/ajaxLoading.gif&&alt=&load&failed&&/&&&&&&&&&&&&&&&&&&&&&&&label&getting,please&wait......&/label&&&&&&&&&&&&&&&&&&&/div&&&&&&&&&&&&&&&/div&&&&&&&&&&&&&&&div&class=&row&&id=&divcompare&&style=&display:text-align:center&&&&&&&&&&&&&&&&&&&&div&class=&col-md-6&&&&&&&&&&&&&&&&&&&&&&&&img&src=&~/Images/ajaxLoading.gif&&alt=&load&failed&&/&&&&&&&&&&&&&&&&&&&&&&&label&comparing,please&wait......&/label&&&&&&&&&&&&&&&&&&&/div&&&&&&&&&&&&&&&/div&&&&&&&&&&&&&&&div&class=&row&&id=&divfix&&style=&display:text-align:center&&&&&&&&&&&&&&&&&&&&div&class=&col-md-6&&&&&&&&&&&&&&&&&&&&&&&&img&src=&~/Images/ajaxLoading.gif&&alt=&load&failed&&/&&&&&&&&&&&&&&&&&&&&&&&label&fixing,please&wait......&/label&&&&&&&&&&&&&&&&&&&/div&&&&&&&&&&&&&&&/div&&&&&&&&&&&&&&&div&class=&row&&style=&margin-top:10px&&&&&&&&&&&&&&&&&&&&div&class=&col-md-12&form-inline&&&&&&&&&&&&&&&&&&&&&&&&div&class=&form-group&input-group&&&&&&&&&&&&&&&&&&&&&&&&&&&&span&class=&input-group-addon&&IsMarried:&/span&&&&&&&&&&&&&&&&&&&&&&&&&&@Html.DropDownList(&ddlMarried&,&ViewBag.MarriedList&as&SelectList,&null,&new&{&id&=&&ddlMarried&,&@class&=&&form-control&&})&&&&&&&&&&&&&&&&&&&&&&/div&&&&&&&&&&&&&&&&&&&&&&&div&class=&form-group&&style=&margin-left:10px&&&&&&&&&&&&&&&&&&&&&&&&&&&&label&class=&control-label&&BirthDay:&/label&&&&&&&&&&&&&&&&&&&&&&&&&&&input&type=&date&&id=&txtdatestart&&class=&form-control&&&&&&&&&&&&&&&&&&&&&&&&&&&&label&class=&control-label&&-&/label&&&&&&&&&&&&&&&&&&&&&&&&&&&input&type=&date&&id=&txtdateend&&class=&form-control&&&&&&&&&&&&&&&&&&&&&&&&/div&&&&&&&&&&&&&&&&&&&&&&&div&class=&form-group&input-group&&style=&margin-left:10px&&&&&&&&&&&&&&&&&&&&&&&&&&&&span&class=&input-group-addon&&Name:&/span&&&&&&&&&&&&&&&&&&&&&&&&&&&input&id=&txtusername&&type=&text&&class=&form-control&&placeholder=&input&name...&&style=&width:120px&&/&&&&&&&&&&&&&&&&&&&&&&&/div&&&&&&&&&&&&&&&&&&&&&&&div&class=&form-group&&style=&margin-left:10px&&&&&&&&&&&&&&&&&&&&&&&&&&&&input&id=&btnsearch&&type=&button&&class=&btn&btn-info&&value=&Get&&style=&width:70px&&/&&&&&&&&&&&&&&&&&&&&&&&/div&&&&&&&&&&&&&&&&&&&/div&&&&&&&&&&&&&&&/div&&&&&&&&&&&&&&&div&class=&row&&style=&margin-top:10px&&&&&&&&&&&&&&&&&&&&div&id=&divresult&&class=&col-md-7&form-inline&&pre-Scrollable&&&&&&&&&&&&&&&&&&&&&&&@{Html.RenderPartial(&~/Views/Partial/UserInfoPartial.cshtml&);}&&&&&&&&&&&&&&&&&&/div&&&&&&&&&&&&&&&&&&&div&class=&col-md-5&&&&&&&&&&&&&&&&&&&&&&&@{Html.RenderPartial(&~/Views/Partial/DiffAndSameWithSolrPartial.cshtml&);}&&&&&&&&&&&&&&&&&&/div&&&&&&&&&&&&&&&/div&&&&&&&&&&&/form&&&&&&&/div&&&/body&&&/html&&
我们使用html5+BootStrap布局,这里用到了BootStrap的网格系统,将浏览器平分为12份,即12列,很容易构造出响应式布局系统。那么什么是BootStrap的网格系统,看如下的解释
OK,我们怎么看是否是响应式的布局呢,我们打开谷歌浏览器,现将浏览器缩小到一定程度。
看到了吧,即使设备浏览器这么小,我们还是能用。那我们在手机模拟器中测试一下,打开谷歌浏览器,按F12,点击手机模拟器样的东西,然后Device选择iphone6。
我们看到iphone6下面的效果是这样的。说到这里我最近很讨厌两个广告,一个是&这个是iphone6,这个是iphone6
plus,它们都有一个叫健康的东西.....但是好吃啊&,还有一个是&当牛魔王变成一个饺子,我愿意变成一双筷子&。看到这两个广告,我想砸电视。
那为什么不同的设备不同的浏览器都是可以正常浏览的呢,原因就在于这段代码
&meta&name=&viewport&&content=&width=device-initial-scale=1&&/&&
这段代码的意思是网页宽度默认等于屏幕宽度,缩放比例默认为1(网页初始比例占屏幕的100%)。
ok,我们接下来看head部分css和js的引用,这里有个新东西叫Bundle,用来打包压缩js或者css的。通过它打包压缩的js或者css客户端只需要下载一次包即可,而且可以在客户端缓存起来,当检测到有更新时,才会重新下载。
下面是Bundle.cs的代码
using&System.W&using&System.Web.O&&&namespace&Brue.GRLC.Web&{&&&&&public&class&BundleConfig&&&&&{&&&&&&&&&&&&&&&&&&public&static&void&RegisterBundles(BundleCollection&bundles)&&&&&&&&&{&&&&&&&&&&&&&bundles.Add(new&ScriptBundle(&~/bundles/BootStrap&).Include(&&&&&&&&&&&&&&&&&&&&&&&&&&~/Scripts/jquery-1.11.1.js&,&~/BootStrap/js/bootstrap.js&));&&&&&&&&&&&&&&&bundles.Add(new&ScriptBundle(&~/bundles/Scripts&).Include(&~/Js/Index.js&));&&&&&&&&&&&&&&&bundles.Add(new&StyleBundle(&~/css&).Include(&~/BootStrap/css/bootstrap-theme.css&&&&&&&&&&&&&&&&&&,&&~/BootStrap/css/bootstrap.css&));&&&&&&&&&}&&&&&}&}&
注意,在这里引用js的时候不要引用压缩过的js,比如xxx.min.js。当Bundle在遇到这种js命名文件的时候,直接就忽略掉了。那么我们在Head中只需要使用如下代码来引用即可。
@Scripts.Render(&~/bundles/BootStrap&)&@Scripts.Render(&~/bundles/Scripts&)&
OK,在这我碰到一个问题,就是我的css通过这种方式引用,始终提示Index out of range。如果哪位大牛知道原因的话麻烦留个言,谢谢!
OK,我们接下来看一下控制器代码,页面刚进来,会走Home/Index。
public&ActionResult&Index()&&&&&&&&&{&&&&&&&&&&&&&List&object&&marriedList&=&GRLCBiz.GetInstance().GetMarriedList();&&&&&&&&&&&&&SelectList&selectList&=&new&SelectList(marriedList,&&MarriedID&,&&DisplayContent&,&&-1&);&&&&&&&&&&&&&ViewBag.MarriedList&=&selectL&&&&&&&&&&&&&&&DataResponse&UserDBEntity&&dataResponse&=&GRLCBiz.GetInstance().GetUserInfoEntityList();&&&&&&&&&&&&&UserInfoViewModel&userInfoViewModel&=&new&UserInfoViewModel();&&&&&&&&&&&&&userInfoViewModel.DataResponse&=&dataR&&&&&&&&&&&&&userInfoViewModel.DataResponse.PageIndex&=&ConstValues.CONN_DefaultPageI&&&&&&&&&&&&&userInfoViewModel.DataResponse.PageSize&=&ConstValues.CONN_DefaultPageS&&&&&&&&&&&&&userInfoViewModel.DataResponse.StartPageIndex&=&1;&&&&&&&&&&&&&return&View(userInfoViewModel);&&&&&&&&&}&
首先我们构造了一个SelectList用于下拉列表,Biz层的代码很简单
public&dynamic&GetMarriedList()&&&&&&&&&{&&&&&&&&&&&&&IList&object&&marriedList&=&new&List&object&();&&&&&&&&&&&&&marriedList.Add(new&{&MarriedID&=&-1,&DisplayContent&=&&No&Selection&&});&&&&&&&&&&&&&marriedList.Add(new&{&MarriedID&=&0,&DisplayContent&=&&Married&&});&&&&&&&&&&&&&marriedList.Add(new&{&MarriedID&=&1,&DisplayContent&=&&UnMarried&&});&&&&&&&&&&&&&&&return&marriedL&&&&&&&&&}&
用匿名类去构造一个List。接下来就是DataReponse的获取,Biz层的代码如下
public&DataResponse&UserDBEntity&&GetUserInfoEntityList(UserInfoRequest&request&=&null)&&&&&&&&&{&&&&&&&&&&&&&if(request==null)&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&request&=&new&UserInfoRequest();&&&&&&&&&&&&&&&&&request.PageIndex&=&ConstValues.CONN_DefaultPageI&&&&&&&&&&&&&&&&&request.PageSize&=&ConstValues.CONN_DefaultPageS&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&int&totalCount=0;&&&&&&&&&&&&&&&List&UserDBEntity&&userDBEntityList&=&GRLCDAL.GetInstance().GetUserInfoEntityList(request,&out&totalCount);&&&&&&&&&&&&&DataResponse&UserDBEntity&&dataResponse&=&new&DataResponse&UserDBEntity&();&&&&&&&&&&&&&dataResponse.DataList&=&userDBEntityL&&&&&&&&&&&&&dataResponse.TotalCount&=&totalC&&&&&&&&&&&&&return&dataR&&&&&&&&&}&
没什么可说的,ConstValues类中是一些静态只读属性
public&class&ConstValues&&&&&{&&&&&&&&&public&static&readonly&string&CON_DBConnection&=&ConfigurationManager.ConnectionStrings[&DB_ConnectionStr&].ToString();&&&&&&&&&public&static&readonly&string&CON_DbScriptXmlFolder&=&ConfigurationManager.AppSettings[&DbScriptXmlFolder&];&&&&&&&&&public&static&readonly&int&CONN_DefaultPageSize&=&int.Parse(ConfigurationManager.AppSettings[&DefaultPageSize&]);&&&&&&&&&public&static&readonly&int&CONN_DefaultPageIndex&=&1;&&&&&&&&&public&static&readonly&int&CONN_PagerDisplayCount&=&int.Parse(ConfigurationManager.AppSettings[&PagerDisplayCount&]);&&&&&}&
看一下DAL层。
public&List&UserDBEntity&&GetUserInfoEntityList(UserInfoRequest&request,&out&int&totalCount)&&&&&&&&&{&&&&&&&&&&&&&totalCount&=&0;&&&&&&&&&&&&&string&sqlScript&=&string.E&&&&&&&&&&&&&try&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&sqlScript&=&DBScriptManager.GetScript(this.GetType(),&&GetUserInfo&);&&&&&&&&&&&&&&&&&SqlParameter[]&sqlParameters&=&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&new&SqlParameter(&@IsMarried&,SqlDbType.Char,1),&&&&&&&&&&&&&&&&&&&&&new&SqlParameter(&@StartDate&,SqlDbType.DateTime),&&&&&&&&&&&&&&&&&&&&&new&SqlParameter(&@EndDate&,SqlDbType.DateTime),&&&&&&&&&&&&&&&&&&&&&new&SqlParameter(&@UserName&,SqlDbType.NVarChar,20),&&&&&&&&&&&&&&&&&&&&&new&SqlParameter(&@PageIndex&,SqlDbType.Int),&&&&&&&&&&&&&&&&&&&&&new&SqlParameter(&@PageSize&,SqlDbType.Int),&&&&&&&&&&&&&&&&&&&&&new&SqlParameter(&@TotalCount&,SqlDbType.Int)&&&&&&&&&&&&&&&&&};&&&&&&&&&&&&&&&&&&&sqlParameters[0].Value&=&request.IsM&&&&&&&&&&&&&&&&&sqlParameters[1].Value&=&request.StartD&&&&&&&&&&&&&&&&&sqlParameters[2].Value&=&request.EndD&&&&&&&&&&&&&&&&&sqlParameters[3].Value&=&request.UserN&&&&&&&&&&&&&&&&&sqlParameters[4].Value&=&request.PageI&&&&&&&&&&&&&&&&&sqlParameters[5].Value&=&request.PageS&&&&&&&&&&&&&&&&&sqlParameters[6].Direction&=&ParameterDirection.O&&&&&&&&&&&&&&&&&&&DataSet&ds&=&SqlHelper.ExecuteDataset(ConstValues.CON_DBConnection,&CommandType.Text,&sqlScript,&sqlParameters);&&&&&&&&&&&&&&&&&if&(ds&!=&null&&&&ds.Tables.Count&&&0)&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&totalCount&=&Convert.ToInt32(sqlParameters[6].Value);&&&&&&&&&&&&&&&&&&&&&return&ds.Tables[0].ToEntityList&UserDBEntity&();&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&return&new&List&UserDBEntity&();&&&&&&&&&&&&&}&&&&&&&&&&&&&catch&(Exception&ex)&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&LogHelper.WriteExceptionLog(MethodBase.GetCurrentMethod(),&ex);&&&&&&&&&&&&&&&&&return&null;&&&&&&&&&&&&&}&&&&&&&&&}&
OK,我们看一下这个GetUserInfo脚本,在Bruce.GRLC.DbScriptXml程序集下。
&?xml&version=&1.0&&encoding=&utf-8&&?&&&Scripts&&&&&Script&Key=&GetUserInfo&&&&&&&&![CDATA[&DECLARE&@UserTempTable&TABLE&(&&&&&&&ID&INT&IDENTITY(1,1)&NOT&NULL,&&&&&UserNo&CHAR(25)&NOT&NULL&)&&&INSERT&INTO&@UserTempTable&(&&&&&UserNo&)&SELECT&&&&&A.UseNo&FROM&Bonus.dbo.[User]&A&WITH(NOLOCK)&LEFT&JOIN&Bonus.dbo.UerInfo&B&WITH(NOLOCK)&&&&&ON&A.UseNo&=&B.UseNo&WHERE&(@IsMarried&IS&NULL&OR&@IsMarried&=&''&OR&B.Temper&=&@IsMarried)&&&&&AND&&&&&(&&&&&&&&&@StartDate&IS&NULL&&&&&&&&&&OR&@EndDate&IS&NULL&&&&&&&&&&OR&B.BirthDay&BETWEEN&@StartDate&AND&@EndDate&&&&&)&&&&&AND&&&&&&(&&&&&&&&&@UserName&IS&NULL&&&&&&&&&&OR&@UserName&=&''&&&&&&&&&&OR&B.Name&LIKE&'%'&+&@UserName&+&'%'&&&&&)&ORDER&BY&A.UseNo&ASC&&&&&&&SELECT&@TotalCount&=&COUNT(1)&FROM&@UserTempTable&&&SELECT&&&&&UseNo,&&&&&Name,&&&&&Age,&&&&&Married&FROM(&&&&&SELECT&&&&&&&&&ID&=&ROW_NUMBER()&OVER(ORDER&BY&UseNo&ASC),&&&&&&&&&A.UseNo,&&&&&&&&&B.Name,&&&&&&&&&B.Age,&&&&&&&&&Married&=&CASE&WHEN&B.Temper&=&'1'&&&&&&&&&&&&&&&&&&&&&&&&&THEN&'已婚'&&&&&&&&&&&&&&&&&&&&&&&&ELSE&'未婚'&&&&&&&&&&&&&&&&&&&END&&&&&&&&&FROM&Bonus.dbo.[User]&A&WITH(NOLOCK)&&&&&LEFT&JOIN&Bonus.dbo.UerInfo&B&WITH(NOLOCK)&&&&&&&&&ON&A.UseNo&=&B.UseNo&&&&&INNER&JOIN&@UserTempTable&C&&&&&&&&&ON&C.UserNo&=&A.UseNo&)&N&WHERE&ID&BETWEEN&(@PageIndex&-&1)*&@PageSize&+&1&AND&@PageIndex&*&@PageSize&&&&]]&&&&&/Script&&&/Scripts&&
脚本很简单,就是传入参数查分页数据。
在DAL层我们将DataTable通过ToEntityList转化为了实体List,在Utility中我们定义了一个扩展用来转化。
public&static&class&DataTableToEntityExtension&&&&&{&&&&&&&&&public&static&List&T&&ToEntityList&T&(this&DataTable&dt)&where&T&:&class,new()&&&&&&&&&{&&&&&&&&&&&&&List&T&&entityList&=&new&List&T&();&&&&&&&&&&&&&&&Type&entityType&=&typeof(T);&&&&&&&&&&&&&PropertyInfo[]&propertys&=&entityType.GetProperties();&&&&&&&&&&&&&DataMappingAttribute&mappingAttribute&=&null;&&&&&&&&&&&&&&&foreach&(DataRow&dr&in&dt.Rows)&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&T&tEntity&=&new&T();&&&&&&&&&&&&&&&&&&&foreach&(PropertyInfo&pi&in&propertys)&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&mappingAttribute&=&pi.GetCustomAttribute(typeof(DataMappingAttribute))&as&DataMappingA&&&&&&&&&&&&&&&&&&&&&&&if&(mappingAttribute&!=&null&&&&dt.Columns.Contains(mappingAttribute.mappingName))&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&if&(!pi.CanWrite)&continue;&&&&&&&&&&&&&&&&&&&&&&&&&&&object&value&=&dr[mappingAttribute.mappingName];&&&&&&&&&&&&&&&&&&&&&&&&&if&(value&!=&DBNull.Value)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&pi.SetValue(tEntity,&value,&null);&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&entityList.Add(tEntity);&&&&&&&&&&&&&}&&&&&&&&&&&&&return&entityL&&&&&&&&&}&&&&&}&
值那么转化的时候是怎么让DataTable的列和实体匹配起来,你可以将列别名和实体定义成一样的,还有一种你可以使用Attribute。那我们使用后者,因为后者更灵活。
[AttributeUsage(AttributeTargets.Property)]&&&&&public&class&DataMappingAttribute&:&Attribute&&&&&{&&&&&&&&&public&string&mappingN&&&&&&&&&public&DbType&dbT&&&&&&&&&public&DataMappingAttribute()&&&&&&&&&{&}&&&&&&&&&&&public&DataMappingAttribute(string&mappingName,&DbType&dbType)&&&&&&&&&{&&&&&&&&&&&&&this.mappingName&=&mappingN&&&&&&&&&&&&&this.dbType&=&dbT&&&&&&&&&}&&&&&}&
定义好Attribute之后,我们设置其能使用的目标只能是Property。然后我们在实体类里面的属性上加上这个Attribute。
namespace&Bruce.GRLC.Model.Entity&{&&&&&public&class&UserDBEntity&&&&&{&&&&&&&&&[DataMapping(&UseNo&,&DbType.AnsiString)]&&&&&&&&&public&string&UserID&{&&&}&&&&&&&&&&&[DataMapping(&Name&,&DbType.AnsiString)]&&&&&&&&&public&string&UserName&{&&&}&&&&&&&&&&&[DataMapping(&Age&,&DbType.Int32)]&&&&&&&&&public&int&Age&{&&&}&&&&&&&&&&&[DataMapping(&Married&,&DbType.String)]&&&&&&&&&public&string&Married&{&&&}&&&&&}&}&
在DataTableToEntityExtension这个扩展中我们得到属性的Attribute去和DataTable的列名去匹配,反射赋值。
OK,拿到数据后,我们在控制器构造viewModel,传递给界面来绑定。我们看一下部分页UserInfoPartial.cshtml的代码
@using&Bruce.GRLC.Model.ViewM&@model&UserInfoViewModel&&table&id=&tabuserinfo&&class=&table&table-bordered&table-hover&&&&&&&&thead&&&&&&&&&&&tr&style=&background-color:&#2aabd2;color:white&&&&&&&&&&&&&&&&th&帐号&/th&&&&&&&&&&&&&&&th&姓名&/th&&&&&&&&&&&&&&&th&年龄&/th&&&&&&&&&&&&&&&th&婚否&/th&&&&&&&&&&&/tr&&&&&&&/thead&&&&&&&tbody&&&&&&&&&&@if&(Model&!=&null&&&&Model.DataResponse&!=&null&&&&Model.DataResponse.DataList&!=&null)&&&&&&&&&{&&&&&&&&&&&&&foreach&(var&userEntity&in&Model.DataResponse.DataList)&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&tr&&&&&&&&&&&&&&&&&&&&&&&td&&&&&&&&&&&&&&&&&&&&&&&&&&@userEntity.UserID&&&&&&&&&&&&&&&&&&&&&&/td&&&&&&&&&&&&&&&&&&&&&&&td&&&&&&&&&&&&&&&&&&&&&&&&&&@userEntity.UserName&&&&&&&&&&&&&&&&&&&&&&/td&&&&&&&&&&&&&&&&&&&&&&&td&&&&&&&&&&&&&&&&&&&&&&&&&&@userEntity.Age&&&&&&&&&&&&&&&&&&&&&&/td&&&&&&&&&&&&&&&&&&&&&&&td&&&&&&&&&&&&&&&&&&&&&&&&&&@userEntity.Married&&&&&&&&&&&&&&&&&&&&&&/td&&&&&&&&&&&&&&&&&&&/tr&&&&&&&&&&&&&&}&&&&&&&&&}&&&&&&/tbody&&&/table&&&div&id=&divpagination&&&&&&&@{Html.RenderPartial(&~/Views/Partial/PaginationPartial.cshtml&,&Model.DataResponse);}&&/div&&
其实也就是一个应用了BoootStrap样式的表格,有边框和鼠标经过的样式。关于BootStrap的样式的使用,请参考BootStrap官网。代码很简单,就是循环遍历,展示数据。
【编辑推荐】
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
头条热点头条关注热点
24H热文一周话题本月最赞
讲师:242722人学习过
讲师:16150人学习过
讲师:16222人学习过
精选博文论坛热帖下载排行
有些网站看起来很清爽;
有些网站看起来很杂乱;
有些网站能让你轻松地找到资料;
有些网站让你犹如置身迷宫……
订阅51CTO邮刊ASP.NET MVC 4中如何为不同的浏览器自适应布局和视图 - 陈希章 - 博客园
随笔 - 1336, 文章 - 0, 评论 - 3161, 引用 - 4
在ASP.NET MVC 4中,可以很简单地实现针对不同的浏览器自适应布局和视图。这个得归功于MVC中的"约定甚于配置"的设计理念。
默认的自适应
MVC 4自动地为移动设备浏览器和PC设备浏览器进行自适应。针对布局页面,默认的文件名为_Layout.cshtml,这个默认会被所有的浏览器使用。但如果我们希望在移动设备上面,呈现一个不同的布局,只需要添加一个名称为_Layout.Mobile.cshtml的布局页面就可以了。同样的规则,也适用于普通的视图页面。例如Index.cshtml默认是被所有的浏览器使用的,但如果添加了Index.Mobile.cshtml,则在移动设备上面,会自动使用这个新的视图进行呈现。如下图所示
那么,为什么会能够自动实现这样的功能呢?或者我们该问问,怎么样才能区分移动设备浏览器呢?其实,这个说起来是不难的
下面这个文章介绍了关于浏览器检测的一些基本概念
在ASP.NET MVC中,是在什么位置,通过什么样的方式来进行这个检测,并且据此进行布局或视图的选择的呢?
通过分析源代码( ),我们可以在下面的代码中发现端倪
所以,这个功能是在DisplayModeProvider这个类型中实现的。它默认注册了两个所谓的DefaultDisplayMode,其中第一个是有条件判断的,根据IsMobileDevice属性判断是不是移动设备浏览器,如果是,则使用一个固定的前缀Mobile。这个DefaultDisplayMode类型,会自动做路径的Transform。
自定义适应规则
如果理解了上面的原理,我们就可以根据需要添加自己的规则。例如,我们可以为iPhone设备添加一个特定的显示模型,可以修改global.asax中的代码。
这样的话,只要添加下面的布局或者视图页面的话,就可以很简单地实现针对iPhone设备的呈现了。

我要回帖

更多关于 普通图像 做成矢量 的文章

 

随机推荐