2009-07-28 6 views
1

ヘルパを作成し、DateTimeオブジェクトを渡すことができ、識別子(文字列)を作成しました。次に、DD |を示す3つの選択肢を出力します。 MM | YYYY(またはあなたが変なアメリカ人があなたの日付を望む方)。特定のフォームフィールドをキャプチャして結合するASP.NET MVC OnActionExecutingフィルタ

各選択の名前の先頭に共通のコンポーネントを追加しています。

  • dateselector - 日 - {識別子}
  • dateselector-month- {識別子}
  • dateselector-year- {識別子}私はたい何

は、フィルタを設定することですすべてのフォーム投稿を取得するためにサイトコントローラの親の "OnActionExecuting"で "dateselector-"で始まるフィールドをスキミングし、{identifier}という名前の変数に3つの(日/月/年)フィールドを追加して渡します。

うん、私はRailsのヘルパー(date_select)を複製しようとしています...

答えて

1

;)あなたのフィルタでは、このようなものを使用します。

var Params = filterContext.RequestContext.HttpContext.Request.Params; 

var dateParts = Params.AllKeys 
    .Where(x => x.StartsWith("dateselector-")) 
    .Select(x => new { 
     Id = x.Substring(x.LastIndexOf('-') + 1), 
     Part = x.Remove(x.LastIndexOf('-')).Substring(x.IndexOf('-') + 1), 
     Value = Params[x] 
    }).GroupBy(x => x.Id) 
    .ToDictionary(
     x => x.Key, 
     x => x.ToDictionary(y => y.Part, y => y.Value) 
    ); 

var date = String.Format(
    "{0}-{1}-{2}", 
    dateParts["identifier"]["year"], 
    dateParts["identifier"]["month"], 
    dateParts["identifier"]["day"] 
); 

// UPDATED after comment 
// Params.Add("identifier", date); 

// You can use HttpContext.Items instead: 
filterContext.HttpContext.Items.Add("identifier", date); 
+0

これはかなり良いようですが、Paramsは読み込み専用なので追加できないようです... – boymc

+0

代わりに 'HttpContext.Items'を試してみてください。私は私の答えを更新しました。 –

+0

期限が過ぎると、フォーム内でJQueryを使用する必要がなくなりました。 – boymc

1

custom action filterを作成します。

ActionExecutingContext.Paramsを使用すると、投稿された値を取得できます。

ActionExecutingContext.ActionParametersを使用すると、コントローラアクションに渡されるパラメータ
を設定できます。

編集:私の記憶が正しければ
、いくつかの日時経営管理論のものはCodeCampServer源でした。
チェックする価値があります。

EDIT2:
うん、EU-GE-NE。私のミスは、私はまだ種類眠いと私のコードでこれに気付かなかっ:

var request = filterContext.Controller.ControllerContext.HttpContext.Request; 

しかし、私はPARAMSがあまりにもクエリ文字列からの値が含まれているため.Paramsは、.FORMない意味します。
HTTPがGETを使用すると便利です。ただ、アーニスのanwerに追加

+1

アーニス、 'ActionExecutingContext'には' Params'プロパティを持っていません。あなたは 'ActionExecutingContext.RequestContext.HttpContext.Request.Form'を意味しましたか? –