ViewPage.Html

ASP.NET MVCでは、"asp:"で始まるWebサーバコントロールの代わりに、HTML要素を表示するためのヘルパークラスがあり、ViewPage.Htmlプロパティから使うことが出来る。

ViewPage.Html プロパティ (System.Web.Mvc) | Microsoft Docs

Index.aspxで、

ViewPage.Htmlの型を見てみる。

HtmlHelper
HtmlHelper

HtmlHelper。

Sample/aspnetmvc/ViewPage/Html/src/ViewPage_ at master · bg1bgst333/Sample · GitHub

AcceptVerbsAttribute

AcceptVerbsAttributeは、どのHTTPメソッドに応答するかを指定する属性で、実はHTTPのPOSTに応答することもできる。

AcceptVerbsAttribute クラス (System.Web.Mvc) | Microsoft Docs

FirstController.csで、

Postアクションを追加するのだが、通常のPost()メソッドはHTTPのGETの時に呼ばれる。
下の[AcceptVerbs(HttpVerbs.Post)]が付いているPost(string name)メソッドは、HTTPのPOSTの時に呼ばれる。
そして引数nameには、idがnameなinputタグで送られるパラメータが渡される。
ViewData["name"]にそれをセット。
Post.aspxは、

HTTP GETならViewData["name"]は空。
submitを押した後は、入力していたnameが表示される。

/First/Post/
/First/Post/

"/First/Post/"にアクセス。

最初はHTTP GETのこっち
最初はHTTP GETのこっち

最初はHTTP GETのこっち。

空になってる
空になってる

空になってる。

これを入れてsubmit
これを入れてsubmit

これを入れてsubmit。

HTTP POSTのほうに来て
HTTP POSTのほうに来て

HTTP POSTのほうに来て、

このように表示される
このように表示される

このように表示される。

Sample/aspnetmvc/AcceptVerbsAttribute/AcceptVerbsAttribute/src/AcceptVerbsAttribute_ at master · bg1bgst333/Sample · GitHub

Controller.View

Controllerのアクションの最後は、Controller.Viewメソッドなどで、ViewResultオブジェクトを返す。

Controller.View メソッド (System.Web.Mvc) | Microsoft Docs

FirstController.csで、

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;

namespace Controller_.Controllers
{
    public class FirstController : Controller
    {
        //
        // GET: /First/

        public ActionResult Index()
        {
            ViewData["msg"] = "ABCDE";
            var vr = View();
            return vr;
        }

Viewの戻り値vrを見てみる。
中身は、

こんな感じ
こんな感じ

こんな感じ。
さて、

このidはどうやって渡すのか
このidはどうやって渡すのか

このidはどうやって渡すのか。

引数付きのアクションメソッドIndexを置くと、idを指定した場合そちらに行く。
Index.aspxは、

ViewData["id"]も表示する。

idなしの場合
idなしの場合

idなしの場合。

これはアクション(Index)を指定してないのでエラー。
これはアクション(Index)を指定してないのでエラー。

これはアクション(Index)を指定してないのでエラー。

コントローラ、アクション、id、すべてを指定するとこうなる。
コントローラ、アクション、id、すべてを指定するとこうなる。

コントローラ、アクション、id、すべてを指定するとこうなる。

Sample/aspnetmvc/Controller/View/src/Controller_ at master · bg1bgst333/Sample · GitHub

RouteCollectionExtensions.MapRoute

RouteCollectionへの追加に、RouteCollectionのメソッドを使ってもいいが、ちょっと難しいので、拡張メソッドRouteCollectionExtensions.MapRouteを使う。

RouteCollectionExtensions.MapRoute メソッド (System.Web.Mvc) | Microsoft Docs

Global.asax.csで、

"Custom1"として"{action}-{controller}"なパターンを追加する。

HomeControllerのIndexアクションなら、

こうだし、
こうだし、

こうだし、

省略しない場合はこう
省略しない場合はこう

省略しない場合はこう。
でもこれが、

順序逆でハイフンを入れるパターンでも成功する
順序逆でハイフンを入れるパターンでも成功する

順序逆でハイフンを入れるパターンでも成功する。

これも
これも

これも、

こっちでも成功する
こっちでも成功する

こっちでも成功する。

Sample/aspnetmvc/RouteCollectionExtensions/MapRoute/src/RouteCollectionExtensions_ at master · bg1bgst333/Sample · GitHub

CWindow::OnHScroll

CWindow::OnHScrollで、水平方向スクロールバーの制御をする。
Window.hで、

OnHScrollを追加。
Window.cppでは、DynamicWindowProcで、

WM_HSCROLLでOnHScrollを呼ぶようにして、OnHScrollは、

水平方向スクロールバー処理。
MainWindow.cppでは、

OnCreateでスクロールバー初期化。

OnPaintでスクロールバーの位置を描画。
MainApplication.cppで、

m_pMainWnd->CreateのスタイルでWS_HSCROLLを追加。

起動時はこう。
起動時はこう。

起動時はこう。
右にスクロールすると、

こうなる
こうなる

こうなる。

Test/winapi/CWindow/OnHScroll/src/CWindow at master · bg1bgst333/Test · GitHub

RouteCollection

RouteCollectionの中身を見てみる。

RouteCollection クラス (System.Web.Routing) | Microsoft Docs

Global.asax.csで、

となっている中で、RegisterRoutesの中にブレークポイントしていく。

登録前なのでCountは0
登録前なのでCountは0

登録前なのでCountは0。

routes.IgnoreRouteでも指定のURLが登録されてる
routes.IgnoreRouteでも指定のURLが登録されてる

routes.IgnoreRouteでも指定のURLが登録されてる。

このMapRouteだと、controllerがHome、actionがIndex、idがなし、というデフォルト値の辞書も登録されてる
このMapRouteだと、controllerがHome、actionがIndex、idがなし、というデフォルト値の辞書も登録されてる

このMapRouteだと、controllerがHome、actionがIndex、idがなし、というデフォルト値の辞書も登録されてる。

Sample/aspnetmvc/RouteCollection/RouteCollection/src/RouteCollection_ at master · bg1bgst333/Sample · GitHub

RouteTable.Routes

どのURLが、どのコントローラとアクションに対応しているかを定義しているのが、ルートテーブル。
RouteTable.Routesでアクセスできる。

RouteTable.Routes プロパティ (System.Web.Routing) | Microsoft Docs
第1回 ASP.NET MVCフレームワーク 基本のキ:連載:ASP.NET MVC入門(3/5 ページ) - @IT

Global.asax.csで、

アプリ起動時にRouteTable.Routesの型を見てみる。

型はRouteCollection
型はRouteCollection

型はRouteCollection。

登録前なのでCountは0
登録前なのでCountは0

登録前なのでCountは0。

登録後はCountが2
登録後はCountが2

登録後はCountが2。

Sample/aspnetmvc/RouteTable/Routes/src/RouteTable_ at master · bg1bgst333/Sample · GitHub