2012-08-27 46 views
3

我嘗試發送一個參數與submit按鈕後行動,以便有我的樣本:發送一個複雜的對象作爲參數傳遞給POST操作在ASP.NET MVC3

@using(Html.BeginForm(actionName: "Search", controllerName: "MyController", routeValues: new { rv = "102" })) { 

    ... 
    <input type="submit" value="Search" /> 
} 

,這是我的搜索行動:

[HttpPost] 
public virtual ActionResult Search(string rv, FormCollection collection) { 

... 
} 

所以每一件事情是罰款,直至現在,

然後我試圖發送一個複雜的物體,像Dictionary<string, string>

所以,你可以只用string類型rv參數Dictionary<string, string>和發送字典,但在這種情況下,rv值總是返回一個字典0計數?哪裏有問題?我如何發送字典來發布操作?

更新

我也嘗試這種之一,但尚未制定(平均RV鋼是0計數的字典):

@using(Html.BeginForm(actionName: "Search", controllerName: "MyController", routeValues: new { rv = Model.MyDictionary }, method: FormMethod.Post, htmlAttributes: new { @class = "FilterForm" })) { 

... 
} 

[HttpPost] 
public virtual ActionResult Search(Dictionary<string, string> rv, FormCollection collection) { 

... 
} 
+0

您的意思是? http://stackoverflow.com/questions/1038386/begin-form-with-overload-that-accepts-routevalues-and-htmlattributes或此:http://stackoverflow.com/questions/9028288/mvc3-html-beginform-傳遞參數as-routevaluedictionary-失敗 –

+0

@AliRızaAdıyahşi您提到的鏈接不適合我,我更新問題 – Saeid

+0

你想在字典中發送什麼?你的觀點如何?你想要做模型綁定? – Shyju

回答

3

無法發送複雜的對象。請閱讀following article以瞭解默認模型聯編程序期望的預期聯線格式,如果您希望能夠將該對象反序列化爲集合或字典。

所以閱讀ScottHa的文章和理解預期線格式的詞典後,你可以滾按照約定的自定義擴展方法,將轉換你的字典爲RouteValueDictionary:

public static class DictionaryExtensions 
{ 
    public static RouteValueDictionary ToRouteValues(this IDictionary<string, string> dict) 
    { 
     var values = new RouteValueDictionary(); 
     int i = 0; 
     foreach (var item in dict) 
     { 
      values[string.Format("[{0}].Key", i)] = item.Key; 
      values[string.Format("[{0}].Value", i)] = item.Value; 
      i++; 
     } 
     return values; 
    } 
} 

,然後在您的視圖你可以使用此擴展方法:

@using(Html.BeginForm(
    actionName: "Search", 
    controllerName: "MyController", 
    routeValues: Model.MyDictionary.ToRouteValues(), 
    method: FormMethod.Post, 
    htmlAttributes: new RouteValueDictionary(new { @class = "FilterForm" })) 
) 
{ 
    ... 
} 

顯然這裏我認爲Model.MyDictionaryIDictionary<string, string>財產。

相關問題