Blog Home  Home Feed your aggregator (RSS 2.0)  
light-hearted.net
人は計画を立て、神はそれを笑う
 
 Thursday, July 02, 2009

ASP.NET MVCを使っているとソースコードの中にたくさんの文字列を書いてしまいます。
例えばView名、スクリプトのパス。

ですが、開発の途中でパスが変更になったり、Viewそのものがなくなったりします。
が、デプロイして動作確認するまで気づかない状況になってしまいます。

そんな問題に対応するためのものだと思えばいいと思います。
文字列ではなく、クラス階層を使って表現できるように、してくれるものです。
ちょっと触っただけなので、他にもいろんな機能があるのではないかと。

是非。

ASP.NET MVC v1.0 Source – T4MVC v2.2.00
http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471

Thursday, July 02, 2009 1:31:07 AM (東京 (標準時), UTC+09:00)  #    Comments [0]   ASP.NET  | 
 Sunday, June 21, 2009

前回はActionをこんな感じにしたところで終ってたので、その続き。

   1:  [AcceptVerbs(HttpVerbs.Post)]
   2:  public ViewResult YourName(Account account)
   3:  {
   4:      return View("OK", account);
   5:  }

 

じゃ、以前定義したメソッドも追加したらどうなるのか?

   1:  [AcceptVerbs(HttpVerbs.Post)]
   2:  public ViewResult YourName(string Name)
   3:  {
   4:      return View("OK");
   5:  }

 

するとこんな例外が発生。

image

つまり、同名のActionを探し出して、その引数に合わせてPOSTデータを渡してくれる。ってことか。
じゃ、Viewのほうをいぢってみる。NameをName1に。

   1:  <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
   2:   
   3:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   4:  <html xmlns="http://www.w3.org/1999/xhtml">
   5:  <head runat="server">
   6:      <title>YourName</title>
   7:  </head>
   8:  <body>
   9:      <% using (Html.BeginForm()) { %>
  10:          <p>Your Name: <%= Html.TextBox("Name1")%></p>
  11:          <input type="submit" value="submit" />
  12:      <% } %>
  13:  </body>
  14:  </html>

で、デバッガで確認。

image

ま、予想通り。

つまり、同名のプロパティを探し出してセットしてからActionを呼んでくれる。ということ。

Reflectionバンザイ!

大量のデータを大量のユーザがほぼ同時にPOSTする場合パフォーマンス的にはどうなるのか?
とか疑問だけどその辺は賢人(がいるだろうから)に譲ることにして。

つづく。

Sunday, June 21, 2009 10:58:44 PM (東京 (標準時), UTC+09:00)  #    Comments [0]   ASP.NET  | 
 Tuesday, June 16, 2009

さて次は更新系。

注意が必要なのは、入力フォームを取得すする際はGET、値を送るのはPOSTであること。
Formでずーっとやってるとその辺を忘れがちになるのですな。

とりあえず、入力フォームを作る。

   1:  <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
   2:   
   3:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   4:  <html xmlns="http://www.w3.org/1999/xhtml">
   5:  <head runat="server">
   6:      <title>YourName</title>
   7:  </head>
   8:  <body>
   9:      <% using (Html.BeginForm()) { %>
  10:          <p>Your Name: <%= Html.TextBox("Name")%></p>
  11:          <input type="submit" value="submit" />
  12:      <% } %>
  13:  </body>
  14:  </html>

 

とりあえず確認したいので、Actionを定義。

   1:  public ViewResult YourName()
   2:  {
   3:      return View();
   4:  }

一応、画面を。

image

HTMLソースを見てみる。

   1:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   2:  <html xmlns="http://www.w3.org/1999/xhtml">
   3:  <head><title>YourName</title></head>
   4:  <body>
   5:      <form action="/Home/YourName" method="post">
   6:          <p>Your Name: <input id="Name" name="Name" type="text" value="" /></p>
   7:          <input type="submit" value="submit" />
   8:      </form>
   9:  </body>
  10:  </html>

Html.BeginFormが何をやってくれるかは一目瞭然。
ただ、現状のままだとPOSTしても変化なし。

それで、Actionメソッドを修正。

   1:  [AcceptVerbs(HttpVerbs.Get)]
   2:  public ViewResult YourName()
   3:  {
   4:      return View();
   5:  }
   6:  [AcceptVerbs(HttpVerbs.Post)]
   7:  public ViewResult YourName(string Name)
   8:  {
   9:      ViewData["YourName"] = Name;
  10:      return View();
  11:  }

 

上は初期表示のGET時に呼び出される。下はポストされたPOST時に呼び出される。

で、デバッガで確認してみる。画面は、Visual Studio 2010 Beta 1 日本語版(ニヤリ

image

とりあえず、値が送りつけられていることは確認できた。

通常は入力が正常に完了したら別のページへリダイレクトするので、こんな感じにActionを修正する。

   1:  [AcceptVerbs(HttpVerbs.Post)]
   2:  public ViewResult YourName(string Name)
   3:  {
   4:      return View("OK");
   5:  }

とりあえず、OKというViewを追加する。

   1:  <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
   2:   
   3:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   4:   
   5:  <html xmlns="http://www.w3.org/1999/xhtml" >
   6:  <head runat="server">
   7:      <title>OK</title>
   8:  </head>
   9:  <body>
  10:  </body>
  11:  </html>

 

ここから(やっと)MVC。
Modelを追加。Accountクラス。プロパティはNameのみ。

   1:  public class Account
   2:  {
   3:      public string Name { get; set; }
   4:  }

 

んで、さっきのOK ViewをAccountに関連付ける(Strongly Typed View)。

   1:  <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<Account>" %>
   2:   
   3:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   4:   
   5:  <html xmlns="http://www.w3.org/1999/xhtml" >
   6:  <head runat="server">
   7:      <title>OK</title>
   8:  </head>
   9:  <body>
  10:      Hello <%= Model.Name %>
  11:  </body>
  12:  </html>

 

Actionメソッドをまたまた変更。

   1:  [AcceptVerbs(HttpVerbs.Post)]
   2:  public ViewResult YourName(string Name)
   3:  {
   4:      return View("OK", new Account() { Name = Name });
   5:  }

それでは、実行。

image

image

で、ここで終わりません。もう一か所Actionを修正。

   1:  [AcceptVerbs(HttpVerbs.Post)]
   2:  public ViewResult YourName(Account account)
   3:  {
   4:      return View("OK", account);
   5:  }

 

これで、引数が増減しても影響を受けなくなりました。
ポストされたデータをASP.NET MVCが勝手にModelにバインドしてくれるという不思議。

まだまだ続く。

Tuesday, June 16, 2009 12:43:20 AM (東京 (標準時), UTC+09:00)  #    Comments [0]   ASP.NET  | 
 Monday, June 15, 2009

Microsoftの技術情報は基本的には

  1. 英語で作成される
  2. 翻訳ソフトで日本語化される
  3. ものによっては人によって修正される
  4. 公開されてる

というプロセスで公開されていると、どこかで聞きました。
大抵のものは3はすっ飛ばしているそうです。
#ボリュームがボリュームなので厳しいことは十分理解できます。

なので、日本語版のドキュメントを読んで、ニュアンスがつかめない場合に英語版を読まれているのではないでしょうか?
#私も以前はそうでした。今は最初から英語の方に行くことが多いです。

TechNetなどでもいろんな試みが試されていますが、
「これだ!」という方法は未だ確立されていません。
#というか、非常に難しい課題です。

で、Visual Studio 2010  Beta1のドキュメントですが、
今までとは違う方法が試されています。

Japanese Visual Studio 2010 Beta1 Product Documentation is now available!!
http://blogs.msdn.com/michiko/archive/2009/06/05/japanese-visual-studio-2010-beta1-product-documentation-is-now-available.aspx

英語と日本語のドキュメントが左右のペインに表示され、
日本語にカーソルを合わせると、対応する英語の1文がハイライトされています。
#これこないだ話していた件ですよね?

これはなかなかGOODかもしれません。しばらく利用してからまた。

こういう部分は最終的には利用者である我々に跳ね返ってくるので、機会があればどんどんフィードバックをしましょう!
#「使いづらい」というのではなく。「こうだったら良いのに」というフィードバックね。

FireFoxで表示するとスクロールバーの制御がうまくいってないようですがw

Monday, June 15, 2009 10:28:41 AM (東京 (標準時), UTC+09:00)  #    Comments [0]    | 
 Sunday, June 14, 2009

自分なりいろいろと勉強しているわけですが、初めてっていう人に教えることが多いわけで。。。

Actionの説明で、いきなりViewResultって言ってもねぇ。理解してもらえないかなぁ。

と思うわけです。ということで、こんなActionを書いてみる。

   1:  public string Index()
   2:  {
   3:      return "hello MVC";
   4:  }

で、こういう風に表示されれるわけです。

image

こいつはただのテキストを返すだけで、MもなければVもないただのCなのです。
という展開から、Vを追加して、Mを追加して、という展開を考えているのです。おっと、テストも忘れずに。
調べた感じだと、どんなクラスを戻り値に持つActionを定義しても問題ないみたい。そのクラスのToStringメソッドを勝手に呼び出してくれるだけ。

で、ここでViewResultを返してみる。

   1:  public ViewResult Index()
   2:  {
   3:      return View();
   4:  }

 

image

ASP.NET MVCがどういう順番でASPX,ASCX(つまりView)を探しているかが分かります。
表示されるスタックトレースを眺めるともっと勉強になります。
個人的には、ASCXも探してるというところがポイントかなぁと。

あと、こんな風に書いたらどうなるのかと。

   1:  public string Index()
   2:  {
   3:      return View().ToString();
   4:  }

 

image

ViewResultのToStringメソッドがHTMLを吐き出すわけではなさそうです。
戻り値の型がViewResultの時に、Viewを探しだしてゴニョゴニョすするようです。

それではViewを追加。

   1:  <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
   2:   
   3:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   4:   
   5:  <html xmlns="http://www.w3.org/1999/xhtml" >
   6:  <head runat="server">
   7:      <title>Index</title>
   8:  </head>
   9:  <body>
  10:      <div>
  11:      hello MVC (View)
  12:      </div>
  13:  </body>
  14:  </html>

 

ぶっちゃけ1行目は要らんのですが、実行するとこうなる。

image

それじゃ、ViewDataつかって値を渡してみる。

まずはAction。

   1:  public ViewResult Index()
   2:  {
   3:      ViewData["message"] = "hello MVC (Controller -> View)";
   4:      return View();
   5:  }

次はView。ここでは1行目は必要となる。
 
   1:  <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
   2:   
   3:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   4:   
   5:  <html xmlns="http://www.w3.org/1999/xhtml" >
   6:  <head runat="server">
   7:      <title>Index</title>
   8:  </head>
   9:  <body>
  10:      <div>
  11:      <%= ViewData["message"] %>
  12:      </div>
  13:  </body>
  14:  </html>

 

では、実行。

image

まだ始まったばかり。

Sunday, June 14, 2009 10:38:00 AM (東京 (標準時), UTC+09:00)  #    Comments [0]   ASP.NET  | 
 Thursday, June 04, 2009

なんとなく検索したら、着実にバージョンアップしてた(んだ)。

Microsoft Anti-Cross Site Scripting Library V3.0 Beta
http://www.microsoft.com/downloads/details.aspx?FamilyID=051ee83c-5ccf-48ed-8463-02f56a6bfc09&DisplayLang=en

しっかり読みたい。

Thursday, June 04, 2009 1:53:56 PM (東京 (標準時), UTC+09:00)  #    Comments [0]   Security  | 

いやぁ、SEOにつられました。

真面目に記事を読んでしまった。

IIS Search Engine Optimization Toolkit
http://weblogs.asp.net/scottgu/archive/2009/06/03/iis-search-engine-optimization-toolkit.aspx

IISもそこまで来たか。という印象。

日本語のドキュメント希望。

Thursday, June 04, 2009 1:51:05 PM (東京 (標準時), UTC+09:00)  #    Comments [0]   Windows  | 
 Tuesday, May 26, 2009

完全に自分向きのメモ
最近こんなのばっかり。。。

$ulimit –c unlimited

$./a.out
Segmentation fault (core dumped)

$ls core.*
core.#####

$gdb a.out core.#####

(gdb) bt
#0 ………….
#1 ………….
#2 ………….

(gdb) f 2

(gdb) l

(gdb) p [変数名]

嗚呼、.NET。

Tuesday, May 26, 2009 10:27:29 AM (東京 (標準時), UTC+09:00)  #    Comments [0]    | 
 Monday, May 25, 2009

Scott Hanselman のポスト。

我が家の環境ではRCになってかVHDブートしなくなったのであとで試してみる。

Less Virtual, More Machine - Windows 7 and the magic of Boot to VHD
http://www.hanselman.com/blog/LessVirtualMoreMachineWindows7AndTheMagicOfBootToVHD.aspx

Monday, May 25, 2009 12:55:09 AM (東京 (標準時), UTC+09:00)  #    Comments [0]    | 
 Thursday, May 14, 2009

2010 での話。

名前も SharePoint Workspace に。

名前の通り、SharePoint よりになるんだろうなぁ。

SharePoint のフロントエンド(オフラインでも使える)みたいなものか?

ある意味ファースト バージョンになるのでどうなるのか期待。

Thursday, May 14, 2009 11:03:59 AM (東京 (標準時), UTC+09:00)  #    Comments [0]   Office | SharePoint  | 
Copyright © 2009 yama3. All rights reserved.
DasBlog 'Portal' theme by Johnny Hughes.
Pick a theme: