標準のASP.NET MVC 3コントローラには、次のシグネチャを持つアクションがあります。 public ActionResult Index(int? page, string sort, string sortDir)
私のビューはWebGridを使用しており、 。ダイナミック式APIを使用する場合のASP.NET MVC 3コントローラのアクションパラメータの検証
次へ私は動的表現API(別名動的LINQ)を使用して、パラメータをクエリに変換します。例:
var customerSummary = CustomerManager.CustomerRepository.GetQuery()
.OrderBy(sort + " " + sortDir)
.Select(c => new CustomerSummaryViewModel()
{
Id = c.Id,
Name = c.Name,
IsActive = c.IsActive,
OrderCount = c.Orders.Count
})
.Skip(page.Value - 1 * 10) //10 is page size
.Take(10)
.ToList();
ゴール
私は何をしたいの(そしておそらく有効なラムダを作成する)ソートするためのパラメータを検証するためにDynamic Expressions API自体を使用することです。例えば、私は彼らがParseException
を生み出すかどうかを確認するためにDynamicExpression.Parse()
かDynamicExpression.ParseLambda()
メソッドを使用したいのですが、私はデフォルト(「名前ASCを」昇順名前で例えばソート)との誤ったのparamsを置き換えることができ、その場合には...
問題
問題は、私はParseLambda
を使用して、私は(それが唯一のプロパティ名になります)方向を使用することはできません.OrderBy
にそれを送りたい場合IQueryable
拡張子は文字列のみ を取るということです。例えば、私はこれを行うことができます。
var se = DynamicExpression.ParseLambda<Customer, string>("Name"); // now I can use .OrderBy(se) which is same as .OrderBy(c=>c.Name)
が、ではなく、この
var se = DynamicExpression.ParseLambda<Customer, string>("Name DESC");
要約
I)が1にダイナミックLINQを使用して検証し、2)ソートする(述語を構築したいと思います)アクションに基づいて、私はDymaic LINQに非常に精通していないよしかし、あなたは次の操作を行うことができます
私はダイナミックLINQ(Pew質問として)を使用したいと思います。しかし、それに加えて、あなたの例で "ソート"パラメータをどのように検証するのですか? 「並べ替え」が下敷きモデルの有効なプロパティであることをどうやって確認しますか? :) – zam6ak
私は答えを更新しました(UPD2を参照)。 DLINQで注文するには、私の最初のUPDを見たことがありますか?それはあなたのために働くのですか? – ILya
ところで、間違ったフィールド名を渡すとDLINQはどうなるでしょうか?それは例外を投げるだろうか? – ILya