2013-04-23 59 views
0

我有多項選擇的jQuery plagin(Choosen),當我在 '多重選擇' 模式下使用它,我希望在控制器接下來值:missunderstanding MVC默認綁定

posted string = 'value1,value2...' 

實際上只有

posted string = 'value2' 

如果我直接向FormCollection反駁,我會得到預期值如下:

[HttpPost] 
    public ActionResult TagSearech(/*string tagSelect*/FormCollection c) 
    { 
     // only one value here 
     // string[] names = tagSelect.Split(','); 

     // as expected: value1,.... 
     string expectedValue = c['tagSelect']; 

     return View(); 
    } 

我無法理解可能會導致此行爲的原因。

編輯

這裏查看:

@using (Html.BeginForm("TagSearech", "Tag")) 
    { 
     @Html.DropDownList("tagSelect", Model, new { @class = "chzn-select", data_placeholder = "tag names", multiple = "" }) 
     <input type="submit"/> 
    } 

回答

1

MVC將嘗試輸入數據綁定的URL到模型中。我還沒有看到Chosen.js如何將數據發回服務器,但實質上它的格式錯誤,因此MVC將它看到的第一個元素綁定到字符串Model。

FormsCollection檢索URL中發佈的所有數據,這就是爲什麼您可以在其中看到所有選定的值。

您是否嘗試將傳入模型從字符串更改爲字符串[],並查看是否所有項都綁定到數組?

+0

所以,想法與數組工作很好。可能這是不是錯誤的格式 - 作者使plagin工作在這種方式。像有幾個字段具有相同的名稱和不同的值。 – 2013-04-23 11:02:50

+0

在這種情況下,MVC正確地將第一個值綁定到字段中,但之後不知道如何處理其餘的內容。字符串數組將工作,因爲活頁夾可以繼續將值分配給具有相同名稱的變量。 – Nick 2013-04-23 11:06:26