‘ASP.Net’ カテゴリーのアーカイブ

ASP.Net MVC Web Applicationテンプレートの使い方

2009年9月10日 木曜日

Visual StudioでASP.Net MVC Web Applicationプロジェクトを作成する。

Modelクラス、Repositoryクラスを作成する。RepositoryクラスはModelクラスの取得、保存の操作を実装するクラス。Modelクラスにはビジネスロジックだけを実装する。

Controlクラスを作成するにはControllerフォルダで右クリックし、追加->Controllerをクリックする。
Controllerクラスが作成されるので、例えば下記のようなリストデータ出力用メソッドを作成する。
下記サンプルコードはNerdDinnerサンプルより引用。

         // GET: /Dinners/            リスト出力
        //      /Dinners/Page/2     リスト出力(ページング有り)
        public ActionResult Index(int? page) {
            const int pageSize = 10;

            // RepositoryクラスにはModelクラスの取得、保存の操作を実装する。
           //ビジネスロジックはModelクラスに実装する。
            var upcomingDinners = dinnerRepository.FindUpcomingDinners();
            var paginatedDinners = new PaginatedList<Dinner>(upcomingDinners, page ?? 0, pageSize);

            //ActionResultはViewクラスが返却する。
            return View(paginatedDinners);
        }

 

Viewクラスの作成するには、このメソッド内で右クリックし、「Add View」をクリックするとViewフォルダ内にViewクラス(aspxファイル)が作成される。
aspxファイルはWebFormとは違い、下記のようなテンプレートファイル風なものになる。Htmlヘルパークラスなどを使用してViewを編集する。

<%@ Page Inherits=”System.Web.Mvc.ViewPage<NerdDinner.Helpers.PaginatedList<NerdDinner.Models.Dinner>>” Language=”C#” MasterPageFile=”~/Views/Shared/Site.Master” %>
<asp:Content ID=”Title” ContentPlaceHolderID=”TitleContent” runat=”server”>
 Upcoming Dinners
</asp:Content>
<asp:Content ID=”Content2″ ContentPlaceHolderID=”MainContent” runat=”server”>
    <h2>
        Upcoming Dinners
    </h2>
    <ul>
        <% foreach (var dinner in Model) { %>
            <li>    
                <%= Html.ActionLink(dinner.Title, “Details”, new { id=dinner.DinnerID }) %>
                on
                <%= Html.Encode(dinner.EventDate.ToShortDateString())%>
                @
                <%= Html.Encode(dinner.EventDate.ToShortTimeString())%>
            </li>       
        <% } %>
    </ul>

    <div class=”pagination”>
        <% if (Model.HasPreviousPage) { %>       
            <%= Html.RouteLink(“<<<”,
                               “UpcomingDinners”,
                               new { page=(Model.PageIndex-1) }) %>       
        <% } %>       
        <% if (Model.HasNextPage) { %>       
            <%= Html.RouteLink(“>>>”,
                               “UpcomingDinners”,
                               new { page = (Model.PageIndex + 1) })%>       
        <% } %>   
    </div>   
</asp:Content>

その他、下記のような詳細、CRUD操作などを行うメソッドを必要に応じて作成する。

      //
      // GET: /Dinners/Details/5
     public ActionResult Details(int id)

        //
        // GET: /Dinners/Edit/5
        [Authorize]
        public ActionResult Edit(int id)

        //
        // POST: /Dinners/Edit/5
        [AcceptVerbs(HttpVerbs.Post), Authorize]
        public ActionResult Edit(int id, FormCollection collection)

        //
        // GET: /Dinners/Create
        [Authorize]
        public ActionResult Create()

        //
        // HTTP GET: /Dinners/Delete/1
        [Authorize]
        public ActionResult Delete(int id)

ADO.NET Data Services でJSON形式でデータを受信するには

2009年9月1日 火曜日

JSONを取得する際、HTTPヘッダに下記を付加する。

Accept: application/json

ASP.NetのMenuコントロールがSafari, Chromeで正常に表示されない。

2009年8月9日 日曜日

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers\mozilla.browser

でSafariやChromeの場合に、MenuAdapterとしてSystem.Web.UI.WebControls.Adapters.MenuAdapterが指定されているのが問題な模様。Page_Loadイベントに下記コードを追加して回避した。

        protected void Page_Load(object sender, EventArgs e)
        {
            //Safari, Chromeでメニューコントロールの表示がおかしくなるための対策
            if (Request.UserAgent.ToLower().IndexOf(“applewebkit”) >= 0)
            {
                Request.Browser.Adapters.Clear();
            }
        }

ASP.NetのOutputCacheディレクティブの設定とHTTPヘッダ出力

2008年7月6日 日曜日

OutputCacheディレクティブによってHTTPヘッダ出力がどのように変わるかを調べてみた。結果は下記の通り。なお、下記はProxyを通さずに調査した。

<%@ OutputCache Location=”Any” Duration=”60″VaryByParam=”none” %>
<%@ OutputCache Location=”Client” Duration=”60″VaryByParam=”none” %>
<%@ OutputCache Location=”Downstream” Duration=”60″VaryByParam=”none” %>

Cache-Control: private, max-age=60
Expires: 1分後の日時
LastModified: 現在日時

<%@ OutputCache Location=”ServerAndClient” Duration=”60″VaryByParam=”none” %>

Cache-Control: private, max-age=60
Expires: Sat, 05 Jul 2008 22:17:11 GMT
Last-Modified: Sat, 05 Jul 2008 22:16:11 GMT
Vary: *

<%@ OutputCache Location=”Server” Duration=”60″VaryByParam=”none” %>
<%@ OutputCache Location=”None”%>

Cache-Control: no-cache
Pragma: no-cache
Expires: -1

ASP.Netでページキャッシュを無効にするには

2008年7月6日 日曜日

aspxファイルに下記を追加する。

<%@ OutputCache Location=”None” %>

その他指定できるパラメータは下記(60秒のキャッシュで、条件切り替えしない場合の例)

<%@ OutputCache Location=”Any” Duration=”60″ VaryByParam=”none” %>
サーバ、プロキシ、ブラウザがキャッシュ可能
<%@ OutputCache Location=”Client” Duration=”60″ VaryByParam=”none” %>
ブラウザがキャッシュ可能
<%@ OutputCache Location=”Downstream” Duration=”60″ VaryByParam=”none” %>
プロキシ、ブラウザがキャッシュ可能。
<%@ OutputCache Location=”ServerAndClient” Duration=”60″ VaryByParam=”none” %>
サーバ、クライアントがキャッシュ可能。プロキシは不可。
<%@ OutputCache Location=”Server” Duration=”60″VaryByParam=”none” %>

ObjectDataSourceのサーバサイドでのページング

2008年6月2日 月曜日
  1. ObjectDataSourceのEnablePagingプロパティをtrueに設定する。
  2. オブジェクトのメソッドにmaximumRowsとstartRowIndexパラメータを追加する。パラメータ名はデフォルトの場合。maximumRowsにはページあたりのデータ件数、startRowIndexには開始行のインデックスを指定する。
  3. SelectCountMethodプロパティにデータ件数を取得するメソッドを指定する。

あとはmaximumRowsとstartRowIndexパラメータを使ってページングの処理を実装する。

Webアプリケーション構築技法より。

Asp.Net 2.0以上でのFreeTextBoxの使い方

2008年5月19日 月曜日

Asp.NetのアプリケーションにHTMLエディタを簡単に追加できるFreeTextBoxの使い方は下記の通り。

  • http://freetextbox.com/からモジュールをダウンロード。
  • WebサイトにFreeTextBox.dllの参照を追加する。
  • 使用するページの最初に下記の行を追加する。

<%@ Register TagPrefix=”FTB” Namespace=”FreeTextBoxControls” Assembly=”FreeTextBox” %>

  • 使用するページのPageディレクティブの属性としてValidateRequest=”false”をセットする。ただしこれによって、このページの他の入力値に対するサニタイジングをアプリケーション側でやらなければいけなくなる。
  • FreeTextBoxを配置するところに下記の行を追加する。

<FTB:FreeTextBox id=”FreeTextBox1″ runat=”Server” />

とりあえず以上でコントロールが表示されHTMLの編集が可能となる。