2017-03-31 12 views
0

私はこの問題を適切にフレーズする方法はわかりませんが、基本的にはASP.Netアプリケーションを使用していません。私は私のビューからコントローラへの次のリクエストを送信します。この要求データの構造のために、以下のように、私は100%働いていない2つのクラスが書かれている高度なパラメータをASP.Net MVCに送信

http://localhost:59112/Contacts/IndexJson?current=1&rowCount=50&sort%5BLastName%5D=desc&searchPhrase=&_=1490960196673 

:に続いて

public class RequestData 
{ 
    public int current { get; set; } 
    public int rowCount { get; set; } 
    public string searchPhrase { get; set; } 
    public IEnumerable<SortData> sortItems { get; set; } 
} 
public class SortData 
{ 
    public string Field { get; set; } // FIeld Name 
    public string Type { get; set; } // ASC or DESC 
} 

私コントローラは、私は、次があります。

public JsonResult IndexJson(RequestData model) 
{ 
    /* Irrelevant code */ 
} 

モデルが動作し、ヌルsortItemsリターンを除いてすべてを正しく埋めます。私のクラスでsortItemsFieldTypeをどのように定義できますか?

RequestDataから入ってくるパラメータがsort[Field]=Typeであるためです。

ここにお手伝いいただければ幸いです。

EDIT:

public class RequestData 
{ 
    public int current { get; set; } 
    public int rowCount { get; set; } 
    public Dictionary<string, string> sort { get; set; } 
    public string searchPhrase { get; set; } 
    public Guid id { get; set; } 
} 

modelは、(データの一例){[Field, Type]}としてsortを保持している:

私はこれまで私のRequestDataクラスに変更。

この場合、FieldTypeにアクセスするにはどうすればよいですか。

+0

私はあなたの質問を編集しようとしましたが、クラスの1つに書式がありません。 4スペースを追加しましたが、最小編集は6です! – Neil

+0

申し訳ありません、編集を承認しました。それを指摘してくれてありがとう。 –

答えて

0

これはさまざまな方法で実現できます。それぞれの場合の問題は、単にそのデータ型のモデルバインダーの規則に従わなかっただけでした。

まず最初に、IEnumerableは返信する予定です。これは索引付け可能なタイプではないため、モデルバインダーは決してバインドできません。しかし、代わりにListのようなものを使用しても問題ありません。次に、パラメータ名はListProperty[N].Propertyの形式にする必要があります。ここではNがインデックスです。あなたの状況では、sortItems[0].Field=LastName&sortItems[0].Type=descを使用することができ、それはあなたのモデルにうまく結びついていました。

辞書を使用する場合、名前はDictionaryProperty[N].KeyDictionaryProperty[N].Valueの形式である必要があります。ここでもNがインデックスです。あなたのシーンでは、sort[0].Key=LastName&sort[0].Value=descのようになります。

関連する問題