【F# + ASP.NET MVC】 複数の入力ソースからリクエスト・データを取得するには

◆ Controller

namespace Sample.Controllers

open System.Web
open System.Web.Mvc

type HomeController() =
    inherit Controller()
    member this.Index (id:string) =
        (* ValueProvider プロパティにより、複数の入力ソース(※)から取得可能。
            【取得可能データ(優先順位順)】
               ①子アクションの値(Controllerのメソッド引数)
               ②フォームデータ
               ③ルートデータ
               ④クエリ文字列
               ⑤送信ファイル                            
                 ※ IValueProvider を実装したカスタム・プロバイダーにより
                    Cookie等を追加することも可能
        *)
        // 子アクションの値
        let actionParam = this.ValueProvider.GetValue("id").AttemptedValue        
        this.View() :> ActionResult

    [<HttpPost>]
    member this.Index() =
        // フォームデータ
        let formParam = this.ValueProvider.GetValue("fm").AttemptedValue
        this.View() :> ActionResult

    [<HttpPost>]
    member this.Upload(fl:HttpPostedFileBase) =
        // 送信ファイル
        let file = this.ValueProvider.GetValue("fl").RawValue
        this.View() :> ActionResult

◆ View

@{ Layout = null; }

<!DOCTYPE html>
<html>
<head>
    <title>Index</title>    
</head>
<body>
    <div>
        F# + ASP.NET MVC = Cool!
        @using (Html.BeginForm()) {
            
            @Html.Hidden("fm", "FormValue")
            <p><input type="submit" value="フォームデータ送信" /></p>         
        }

        @using (Html.BeginForm("Upload", "Home", FormMethod.Post
            , new { enctype = "multipart/form-data" }))
        {
            <input type="file" name="fl"/>
            <input type="submit" value="アップロード" />
        }
    </div>
</body>
</html>

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中