ホームページ ウェブフロントエンド htmlチュートリアル クイック スタート シリーズ MVC07 と HTML5 モバイル開発の組み合わせ_html/css_WEB-ITnose

クイック スタート シリーズ MVC07 と HTML5 モバイル開発の組み合わせ_html/css_WEB-ITnose

Jun 21, 2016 am 09:00 AM

モバイル インターネットが普及した現在、クロスプラットフォームでさまざまなデバイスと互換性のある HTML5 がますます普及しており、多くの企業が以前の非 HTML5 Web サイト アプリケーションを徐々に HTML5 に変換しています。 HTML5 アプリケーションの作成 コードのセットは、さまざまな物理端末デバイスやブラウザと互換性があり、システムの保守性と拡張性が大幅に向上します。同時に、HTML5 は、新しいアーキテクチャ要素、Cookie に代わる Web ストレージ テクノロジ、WebSocket など、多くの新機能を提供します。これにより、Web サイト アプリケーションが新しいビジネス環境や技術アップデートにさらに適応できるようになります。

このシステムの Web サイト モジュールは、.NET テクノロジ スタックの ASP.NET MVC フレームワークを使用します。このフレームワークは、Microsoft によって開始されたオープン ソース フレームワークです。関連するソース コードは、Codeplex.com Web サイトで見つけることができます。 。 7 年以上の開発を経て、この技術フレームワークは現在バージョン 5.1 に開発されており、モバイル クライアント テンプレート、WebAPI テンプレート、OAuth 認証、および現在のインターネット ベースの開発を容易にするその他の機能を含む新機能が追加されています。テーマのある背景を持つプロジェクト向け。

実際のプロジェクトでは、次の 2 つの主な問題があります。それは、実際のユーザーが使用する端末デバイスのメーカーとモデルが異なる可能性があること、および異なる Web 端末で適切なスタイルを表示する方法であることです。ASP は 2 つのビュー エンジンを提供します。 、WebForm および Razor はデフォルトでサポートされませんが、HTML5 ページのレンダリングをサポートするようにビュー エンジンを拡張する方法。実際に選択される技術的ソリューションは、メディア クエリなどの技術的手段を使用してレスポンシブな CSS3 デザインを実装し、カスタムの静的 HTML5 ビュー エンジンで ASP.NET MVC フレームワークを拡張することです。次に、プロジェクトにおける 2 つのソリューションの実装と応用について詳しく紹介します。

まず、レスポンシブ Web レイアウトを紹介します。この概念は、2010 年 5 月に Ethan Marcotte によって初めて提案されました。その目的は、Web サイトを複数の端末に対応させることであり、端末ごとに特定のバージョンを開発することではありません。 、モバイルインターネットに関連する問題点を解決するために登場したと言えます。実際、現在運営されている大規模な Web サイトの多くは依然として複数の Web サイト プログラムを維持しており、異なる端末にサービスを提供するために異なるドメイン名を使用しているものもあります。同時に、モバイル Web ページのビジネス機能はある程度削除されることが多く、優れたユーザー エクスペリエンスを提供できますが、これは最も合理的な解決策ではありません。ユーザー インターフェイスを可能な限り統一する必要があります。レスポンシブ ページ レイアウトの具体的な実装には、主に次の手順が含まれます。

最初のステップは、HTML ページの先頭部分に viewport という名前のメタ要素を追加することです。Viewport は、モバイル デバイスの画面に合わせてサイズを設定できる仮想ウィンドウを表します。コードは次のとおりです。 。

1  <meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=0" />2 <script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>View Code
ログイン後にコピー

Content 属性の「width=device-width」は、幅が現在のデバイスの幅であることを意味します。「inial-scale=1」は、初期スケーリング係数が 1 であることを意味します。 -scalable=0" は、手動ユーザー スケーリングがサポートされていないことを意味します。同時に、IE6 などの古いブラウザと互換性を持たせるために css3-mediaqueries.js が追加されます。

2 番目のステップは、メディア クエリ モジュールを使用して、さまざまなデバイスの表示画面サイズに応じてさまざまな CSS ファイルをインポートすることです。このモジュールを適用するには、コンテンツの 2 つの部分を変更する必要があります。1 つは、異なる条件で 3 つの CSS ファイルを HTML ファイルに追加することであり、もう 1 つは、CSS ファイル内の元のコンテンツを指定された形式でラップすることです。コードを以下に示します。

1 //Html文件中:2 <link rel="stylesheet" type="text/css" media="only screen and (min-width:900px)" href="/content/theme/base/normalScreen.css" />3 <link rel="stylesheet" type="text/css" media="only screen and (min-width:480px), only screen and (max-device-width:900)" href="/content/theme/base/smallScreen.css" />4 <link rel="stylesheet" type="text/css" media="only screen and (max-width:480px)" href="/content/theme/base/tinyScreen.css" />5 //CSS文件中:6 @media screen and (min-width:900px) {7 /*正常CSS内容,省略*/8 }View Code
ログイン後にコピー

HTML ファイルでは、Media 属性の「screen and (min-width:900px)」は、メディア タイプが screen であり、画面の最小幅が 900 ピクセルであることを示します。キーワードによりメディアがサポートされなくなります。クエリ デバイスはスタイル ファイルを無視し、href 属性は現在の条件で参照される CSS ファイル パスです。一般に、表示される画面幅が 480 ピクセル未満のデバイスは携帯電話、画面幅が 480 ~ 900 ピクセルのデバイスはタブレット、画面幅が 900 ピクセルを超えるデバイスはデスクトップ コンピュータです。 CSS ファイルでは、ページ内のメディア属性をマップするために @media セグメントが追加されます。ブロックに含まれるコンテンツは、さまざまなデバイスでのスタイルのレイアウトの詳細を示すものです。継承調整によって行われます。

最後のステップは主に、相対的な幅、相対的なフォント サイズ、フロー レイアウト、アダプティブ ピクチャなどの使用を含む、フロントエンド開発の詳細を処理することです。これは従来のページ開発と同様です。ここでは、展開されていないことについて 1 つずつ説明します。最終的なレンダリングは次のとおりです。レスポンシブ ページ レイアウト テクノロジを適用すると、同じコンテンツが異なる方法でレンダリングされることがわかります。

接下来介绍如何在ASP.NET MVC框架中扩展自定义的视图引擎,使得框架能与HTML5技术无缝的衔接。之所以选择ASP.NET MVC框架作为Web前端主要构件基础,除了之前所提到的一些支持移动互联网方面的新特性外,它内生所具备的高性能,高扩展性也起到了很大的作用。相对与重量级的WebForm框架,该框架显得非常的轻量级,使得页面渲染所消耗的资源得到了大幅的减少,并保留了认证、安全和本地缓存等模块的支持。此外,该框架提供了极强的扩展性,无论是自行修改框架,还是在已有项目中增减业务模块,都非常的方便。这一点,和JAVA阵营的J2EE技术很相似,但同时又具有很高的稳定性和较高的开发效率。例如可以自定义URL路由美化URL并提升搜索引擎排名,自定义数据绑定支持不同数据格式的序列化和反序列化,自定义视图引擎应对不同的业务场景等。接下来,具体介绍如何实现自定义的HTML5视图引擎,包含以下的步骤。

第一步,创建自定义的HTML5视图。它是读取HTML5文件并呈现的基础,需要实现 System.Web.Mvc .IView 接口,并实现接口中的Render方法,该方法主要通过流的方式读取指定的HTML5文件并渲染到页面,该部分内容比较简单,简化的代码如下所示。

 1 public class HTML5View : IView 2 { 3 public string FileName { get; private set; }//文件名 4 public HTML5View(string fileName) 5 { 6 this.FileName = fileName; 7 } 8   9 public void Render(ViewContext viewContext, TextWriter writer)10 {11 byte[] buffer = null;12 using (var fs = new FileStream(this.FileName, FileMode.Open))13 {14 buffer = new byte[fs.Length];15 fs.Read(buffer, 0, buffer.Length);16 }17 writer.Write(Encoding.UTF8.GetString(buffer));//读取文件并渲染18 }19 }View Code
ログイン後にコピー

第二步,创建自定义缓存。由于HTML5FileView中都是静态的内容,很自然的需要构建相应的缓存用于提高性能。创建页面的缓存Key对象HTML5ViewCacheKey,实现GetHashCode方法,通过对Controller和View的名称进行简单的Hash组合运算等到缓存内容的Key,并实现Equals方法用于比较,简化的代码如下所示。

 1  public class HTML5ViewCacheKey 2 { 3 public string ControllerName { get; private set; } 4 public string ViewName { get; private set; } 5 public HTML5ViewCacheKey(string controllerName, string viewName) 6 { 7 this.ControllerName = controllerName ?? string.Empty; 8 this.ViewName = viewName ?? string.Empty; 9 }10 11 public override int GetHashCode()12 {13 return this.ControllerName.ToLower().GetHashCode() ^ this.ViewName.ToLower().GetHashCode();14 } 15 16 public override bool Equals(object obj)17 {18 HTML5ViewCacheKey key = obj as HTML5ViewCacheKey;19 if (null == key)20 return false;21 return key.GetHashCode() == this.GetHashCode();22 }23 }View Code
ログイン後にコピー

第三步,创建视图引擎HTML5ViewEngine。该类实现了IViewEngine接口,字典类viewEngineResults结合第二步中构建的缓存类用于缓存渲染后的视图。方法FindView首先解析路由信息获得控制器的名称,之后判断请求是否支持缓存,若不支持缓存,则直接通过 InternalFindView 方法 获得视图。反之,判断请求视图是否在本地缓存中,若存在直接返回,若不存在则调用方法获取并缓存,写缓存时注意加锁。 InternalFindView 方法中,借助面向约定编程的思路到指定的路径中寻找到对应的文件HTML5,最终完成URL信息与文件的映射。

 1 public class HTML5ViewEngine : IViewEngine 2 { 3 private Dictionary<HTML5ViewCacheKey, ViewEngineResult> viewEngineResults = 4 new Dictionary<HTML5ViewCacheKey, ViewEngineResult>(); 5 private static object syncHelper = new object(); 6   7 public ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache) 8 { 9 return this.FindView(controllerContext, partialViewName, null, useCache);10 }11 12 public ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)13 {14 string controllerName = controllerContext.RouteData.GetRequiredString("controller");15 var key = new HTML5ViewCacheKey(controllerName, viewName);16 ViewEngineResult result = null;17 if (!useCache)//是否支持缓存18 {19 result = InternalFindView(controllerContext, viewName, controllerName);20 viewEngineResults[key] = result;21 return result;22 }23 if (viewEngineResults.TryGetValue(key, out result)) //视图是否已经在缓存中24 {25 return result;26 }27 28 lock (syncHelper)//锁定视图数据写入缓存过程29 {30 if (viewEngineResults.TryGetValue(key, out result))31 {32 return result;33 }34 result = InternalFindView(controllerContext, viewName, controllerName);35 viewEngineResults[key] = result;36 return result;37 }38 }39 40 private ViewEngineResult InternalFindView(ControllerContext controllerContext, string viewName, string controllerName)41 {42 string[] searchLocations = new string[]{43 string.Format("~/staticViews/{0}/{1}.html", controllerName.ToLower(), viewName.ToLower()),44 string.Format("~/staticViews/Shared/{0}.html", viewName.ToLower())45 };46 47 string filename = controllerContext.HttpContext.Request.MapPath(searchLocations[0]);48 if (File.Exists(filename))49 {50 return new ViewEngineResult(new HTML5View(filename), this);51 }52 filename = string.Format(@"\staticViews\shared\{0}.html", viewName.ToLower());53 if (File.Exists(filename))54 {55 return new ViewEngineResult(new HTML5View(filename), this);56 }57 return new ViewEngineResult(searchLocations);58 }59 60 public void ReleaseView(ControllerContext controllerContext, IView view)61 {62 }63 }View Code
ログイン後にコピー

最后一步,将视图自定义的视图引擎添加到Global.asax文件的Application_Start方法中,完成该引擎的注册。同时注意需要将该引擎的优先级设为最高,使得系统优先使用该引擎对视图相关请求进行响应。

1  public class MvcApplication : System.Web.HttpApplication2 {3 protected void Application_Start()4 {5 //省略6 ViewEngines.Engines.Insert(0, new HTML5ViewEngine());7 }View Code
ログイン後にコピー

通过以上步骤,基本上将ASP.NET MVC框架,HTML5技术,移动互联网开发技术有机的整合到了一起。

Tip: 本文由于是学习需要,主要参考了以下书目。

[1]蒋金楠. ASP.NET MVC4框架揭秘[M]. 上海:电子工业出版社, 2012. 419-421

[2]唐俊开. HTML5移动Web开发指南[M]. 上海:电子工业出版社, 2012. 52-54

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

公式アカウントのキャッシュの更新の難しさ:バージョンの更新後のユーザーエクスペリエンスに影響を与える古いキャッシュを回避する方法は? 公式アカウントのキャッシュの更新の難しさ:バージョンの更新後のユーザーエクスペリエンスに影響を与える古いキャッシュを回避する方法は? Mar 04, 2025 pm 12:32 PM

公式アカウントのWebページはキャッシュを更新します。これはシンプルでシンプルで、ポットを飲むのに十分な複雑です。あなたは公式のアカウントの記事を更新するために一生懸命働きましたが、ユーザーはまだ古いバージョンを開くことができますか?この記事では、この背後にあるtwist余曲折と、この問題を優雅に解決する方法を見てみましょう。それを読んだ後、さまざまなキャッシュの問題に簡単に対処でき、ユーザーが常に新鮮なコンテンツを体験できるようになります。最初に基本について話しましょう。それを率直に言うと、アクセス速度を向上させるために、ブラウザまたはサーバーはいくつかの静的リソース(写真、CSS、JSなど)やページコンテンツを保存します。次回アクセスするときは、もう一度ダウンロードすることなく、キャッシュから直接検索できます。自然に高速です。しかし、このことは両刃の剣でもあります。新しいバージョンはオンラインです、

WebページのPNG画像にストローク効果を効率的に追加する方法は? WebページのPNG画像にストローク効果を効率的に追加する方法は? Mar 04, 2025 pm 02:39 PM

この記事では、CSSを使用したWebページへの効率的なPNG境界追加を示しています。 CSSはJavaScriptやライブラリと比較して優れたパフォーマンスを提供し、微妙または顕著な効果のために境界幅、スタイル、色を調整する方法を詳述していると主張しています

HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? Mar 17, 2025 pm 12:27 PM

この記事では、ブラウザのユーザー入力を直接検証するために、必要、パターン、MIN、MAX、および長さの制限などのHTML5フォーム検証属性を使用して説明します。

HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? Mar 17, 2025 pm 12:20 PM

記事では、HTML5クロスブラウザーの互換性を確保するためのベストプラクティスについて説明し、機能検出、プログレッシブエンハンスメント、およびテスト方法に焦点を当てています。

&lt; datalist&gt;の目的は何ですか 要素? &lt; datalist&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:33 PM

この記事では、HTML&lt; Datalist&GT;について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

&lt; Progress&gt;の目的は何ですか 要素? &lt; Progress&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:34 PM

この記事では、HTML&lt; Progress&gt;について説明します。要素、その目的、スタイリング、および&lt; meter&gt;との違い要素。主な焦点は、&lt; Progress&gt;を使用することです。タスクの完了と&lt; Meter&gt; statiの場合

&lt; meter&gt;の目的は何ですか 要素? &lt; meter&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:35 PM

この記事では、html&lt; meter&gt;について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化&lt; Meter&gt; &lt; Progress&gt;およびex

HTML5&lt; time&gt;を使用するにはどうすればよいですか 日付と時刻を意味的に表す要素? HTML5&lt; time&gt;を使用するにはどうすればよいですか 日付と時刻を意味的に表す要素? Mar 12, 2025 pm 04:05 PM

この記事では、html5&lt; time&gt;について説明します。セマンティックデート/時刻表現の要素。 人間の読み取り可能なテキストとともに、マシンの読みやすさ(ISO 8601形式)のDateTime属性の重要性を強調し、Accessibilitを増やします

See all articles