2014-01-08 23 views
3

我必須要通過的過濾器陣列是這樣的:如何訪問MVC控制器的Javascript多維數組

腳本代碼:

return { CustomFilter: options.filter.filters }; 

++++++++++++++ ++++++++++++++++++++++++++++++++++

從螢火蟲:

CustomFilter[0][field]  ItemName 
CustomFilter[0][operator] startswith 
CustomFilter[0][value]  testing Value 

CustomFilter[1][field]  BrandName 
CustomFilter[1][operator] startswith 
CustomFilter[1][value]  testing Value 1 

發佈值是:enter image description here

但我無法在控制器端收到這些信息。

我想是這樣的:

public ActionResult ReadOperation(string[][] CustomFilter) 

也是這樣:

public ActionResult ReadOperation(Filter[] CustomFilter) 
public class Filter 
{ 
    public string field { get; set; } 
    public string @operator { get; set; } 
    public string value { get; set; } 
} 

但沒有奏效。請建議。

Tried with model approach

謝謝。


解使用JSON反序列化實測值

Script代碼變更爲:在控制器

using Newtonsoft.Json; 

public ActionResult ReadOperation(MyViewModel model) 
{ 
    var filters = JsonConvert.DeserializeObject(model.CustomFilter, typeof(CustomFilter[])); 
} 

public class MyViewModel 
{ 
    public string Filter { get; set; } 
    public string group { get; set; } 
    public int page { get; set; } 
    public int pageSize { get; set; } 
    public int sort { get; set; } 
} 


public class CustomFilter 
{ 
    public string field { get; set; } 
    public string @operator { get; set; } 
    public string value { get; set; } 
} 

結果視圖:

return { CustomFilter: JSON.stringify(CustomFilter) }; 

控制器代碼變更爲

enter image description here

+0

你的代碼是否可以編譯? –

+0

是的,它也顯示計數2,因爲我傳遞了2個過濾器,但字段,運算符和值的值顯示爲空。 – Gerry

+0

你可以發佈原始的JSON嗎? Firebug應該顯示發佈內容。 –

回答

1

如果您正在使用ASP.NET MVC 4,不能更改參數的名稱,也許你可以這樣定義自定義模式:

public class MyViewModel 
{ 
    public Dictionary<string,string>[] CustomerFilter { get; set; } 
    public string filter { get; set; } 
    public string group { get; set; } 
    public int page { get; set; } 
    public int pageSize { get; set; } 
    public int sort { get; set; } 
} 

然後,在控制器:

public ActionResult ReadOperation(MyViewModel model){ ... } 

看來日在網格生成的參數中使用的符號爲dictionaries。雖然沒有嘗試收集字典。

+1

感謝您的建議。儘管我已經使用json De序列化完成了這個工作。但我也試過你的方式,它爲我工作。謝謝:) – Gerry

+0

不客氣:) –

2

它看起來像模型結構的錯誤。

public class MyViewModel 
{ 
    public Filter[] CustomFilter { get; set; } 
    public string Filter { get; set; } 
    public string Group { get; set; } 
    public int Page { get; set; } 
    public int PageSize { get; set; } 
    public int Sort { get; set; } 
} 

嘗試使用此類型進行模型綁定。

public ActionResult ReadOperation(MyViewModel model) 
+0

感謝@Ufuk .i嘗試了你所說的,但仍然顯示CustomFilter爲null。 – Gerry

+0

@Gerry我在屬性名稱上發生了錯誤。你可以重試嗎? –

+0

是的@ufuk我注意到,我已經嘗試了正確的屬性名稱「CustomFilter」。同樣的屬性值爲null。我附上了問題底部的控制器截圖,你可以檢查。 – Gerry

1

在帖子中,嘗試將數據發送就象這樣:

CustomFilter[0].Field  ItemName 
CustomFilter[0].Operator startswith 
CustomFilter[0].Value  testing Value 

CustomFilter[1].Field  BrandName 
CustomFilter[1].Operator startswith 
CustomFilter[1].Value  testing Value 1 

,並在控制器:

public ActionResult ReadOperation(Filter[] CustomFilter) 

有一個Filter類定義爲:

public class Filter 
{ 
    public string Field { set; get; } 
    public string Operator { set; get; } 
    public string Value { set; get; } 
} 

(注意capi大寫字母)。

或者,如果你想使用的模型方法,如Ufuk建議,並具有相同Filter類:

  • 型號:

    public class MyViewModel 
    { 
        public Filter[] CustomerFilter { get; set; } 
        public string Filter { get; set; } 
        public string Group { get; set; } 
        public int Page { get; set; } 
        public int PageSize { get; set; } 
        public int Sort { get; set; } 
    } 
    
  • 參數在POST:

    CustomFilter[0].Field  ItemName 
    CustomFilter[0].Operator startswith 
    CustomFilter[0].Value  testing Value 
    
    CustomFilter[1].Field  BrandName 
    CustomFilter[1].Operator startswith 
    CustomFilter[1].Value  testing Value 1 
    
    Filter      ItemName~startswith~'12'~and~BrandName~startswith~'123' 
    Group 
    Page      1 
    PageSize     15 
    Sort 
    
  • 控制器

    public ActionResult ReadOperation(MyViewModel model) 
    

請參閱此鏈接:http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

+0

謝謝@Guillermo,但我可以傳遞值給控制器,因爲你告訴,因爲這些是由kendo網格本身發送。其他方面,我必須使用腳本修改過濾器請求(不想這樣做)。 – Gerry

+0

我明白了,所以這是Kendo Grid參數的默認格式。唯一的辦法就是製作一個自定義的模型綁定器。 –