2017-08-02 23 views
0

我很努力從我在兩個組之間進行排序的表單中獲取數據。表格看起來像這樣。 Group Manager 正如你所看到的,取得動作是偉大的工作,整個頁面的工作就好了..這裏是.cshtml視圖沒有從ListBoxFor和MultiSelectList在MVC中發佈表單數據

@model InfoKeeper.Models.GroupManageVewModel 
@{ 
    ViewBag.Title = "ManageGroup"; 
} 

<h2>ManageGroup</h2> 
@using (Html.BeginForm("ManageGroup","GroupManager", FormMethod.Post)) 
{ 
    <div class="nav-block"> 
     <div class="row"> 
      <div class="col-xs-3 col-xs-pull-1 col-xs-offset-2"> 
       <p>Available Groups</p> 
       @Html.HiddenFor(m => m.GroupID) 
       @Html.HiddenFor(m => m.CustomerID) 
       @Html.ListBoxFor(m => m.ResultAvailable, Model.AvailableDepartmentsSL, new { @Name = "from[]", @id = "multiselect", @class = "form-control", @size = "8", @multiple = "multiple", @style = "min-width: 350px;margin-right:50px;" }) 
      </div> 

      <div class="col-xs-2" style="padding-top:25px;"> 
       <button type="button" id="multiselect_rightAll" class="btn btn-block"><i class="glyphicon glyphicon-forward"></i></button> 
       <button type="button" id="multiselect_rightSelected" class="btn btn-block"><i class="glyphicon glyphicon-chevron-right"></i></button> 
       <button type="button" id="multiselect_leftSelected" class="btn btn-block"><i class="glyphicon glyphicon-chevron-left"></i></button> 
       <button type="button" id="multiselect_leftAll" class="btn btn-block"><i class="glyphicon glyphicon-backward"></i></button> 
       <input type="submit" value="save" class="btn btn-block btn-success"> 
      </div> 

      <div class="col-xs-3"> 
       <p>Departments in Group</p> 
       @Html.ListBoxFor(m => m.ResultInGroup, Model.DepartmentsInGroupSL, new { @Name = "to[]", @id = "multiselect_to", @class = "form-control", @size = "8", @multiple = "multiple", @style = "min-width: 350px" }) 
      </div> 
     </div> 
    </div> 
} 

而且,這裏是控制器...

public ActionResult ManageGroup(int GroupID, int CustomerID) 
{ 
    GroupRepo repo = new GroupRepo(); 

    var model = repo.ManageGroup(GroupID, CustomerID); 

    model.AvailableDepartmentsSL = new MultiSelectList(model.AvailableDepartments, "Key", "Value"); 
    model.DepartmentsInGroupSL = new MultiSelectList(model.DepartmentsInGroup, "Key", "Value"); 

    return View(model); 
} 

和模型...

public class GroupManageVewModel 
    { 
     public MultiSelectList AvailableDepartmentsSL { get; set; } 
     public MultiSelectList DepartmentsInGroupSL { get; set; } 
     public Dictionary<int, string> DepartmentsInGroup { get; set; } 
     public Dictionary<int, string> AvailableDepartments { get; set; } 
     public int GroupID { get; set; } 
     public int CustomerID { get; set; } 
     public string GroupName { get; set; } 
     public IEnumerable<int> ResultAvailable { get; set; } 
     public IEnumerable<int> ResultInGroup { get; set; } 
    } 

但是,當我提交表單...這是我得到的帖子...

WAT

因此,表格發佈東西 ... HiddenFors。但由於什麼原因我的ResultAvailable和ResultInGroup爲空...請幫助!

+0

使用'HtmlHelper'方法時永遠不要改變'name'屬性。你沒有名爲'form'和'to'的屬性(並且添加'new {multiple =「multiple」}'是毫無意義的 - 'ListBoxFor()'方法已經添加了這個 –

+0

請看下面我添加的答案! ,SO。 – SentOnLine

回答

0

好吧,我現在正在得到想要的結果。答案存在於一些人認爲克里斯普拉特讓我...

好吧!所以,當表單提交每個選項中的選項元素時,都會被選中。這是在源代碼中的代碼。它必須是別的......我認爲它與SelectList的名稱有關......爲了讓插件工作,我必須將選擇列表的名稱更改爲「from []」和「to []」它必須與此有關......當在MVC中我相信它們通常被命名爲它們正在綁定的道具......將回報

和我是100%正確的(我從來沒有這樣說)。

當我把這個表單放在一起,讓插件工作時,我最初從我的視圖中的文檔代碼看起來像...

 <select name="from[]" id="multiselect" class="form-control" size="8" multiple="multiple"> 
     <option value="1">Item 1</option> 
     <option value="2">Item 5</option> 
     <option value="2">Item 2</option> 
     <option value="2">Item 4</option> 
     <option value="3">Item 3</option> 
    </select> 

取而代之,我決定使用MVC爲您提供的HtmlHelpers,以便我可以提交此表單,並將所有數據準確地放在我想要的位置,而無需構建WebApi控制器並用所有的表單數據jQuery的......在這樣做時,雖然該插件的功能不能正常工作,這是因爲我試圖使用的HtmlHelper Html.ListBoxFor這樣

@Html.ListBoxFor(m => m.ResultAvailable, Model.AvailableDepartmentsSL, new { @name = "from[]", @id = "multiselect", @class = "form-control", @size = "8", @multiple = "multiple", @style = "min-width: 350px;margin-right:50px;" }) 

但是,當我在開發中打開頁面工具name屬性沒有設置爲「from []」它被設置爲「ResultAvailable」經過一些閱讀後,我發現我可以通過更改

將名稱屬性設置爲「from []」

@Name = "from[]" 

啊,這是區分大小寫的!之後,控制工作,但後來我遇到了這個問題,創造了這個問題。這個帖子回來了,有了空值...所以在經過一番思考之後,我想到了人,我想知道如果我剛剛評論了name屬性會發生什麼,這意味着控件不會像過去那樣工作,並從那裏提交提交......令我驚訝的是,它的工作。我是對的,MVC需要ListBox的名字才能改變,因爲它給了它所需要的名字來做我想做的事情......所以,現在插件自然不起作用了,對吧? 錯!

它的工作原理。我不知道爲什麼......

我應該說我的解決方案確實讓我感到不安......但它仍是一個解決方案。感謝您的幫助。

0

對於您的ResultInGroup屬性,您需要使用List<int>。 modelbinder不能綁定到IEnumerable,因爲它不支持索引。

+0

我試過列表和int []都不會給我想要的結果,而且我只是根據您的建議更改了模型,仍然爲空 – SentOnLine

+1

有一些JavaScript將項目從將左邊的列表框放在右邊的列表框中,當你這樣做的時候,你也需要標記爲選中的列表或者沒有任何內容會被列表框發佈,換句話說,你所做的只是移動選項。效果是什麼 –

+0

我有一個小的jQuery插件運行我將不得不檢查源代碼,然後...或者我想我可以添加一個事件監聽器提交按鈕,然後。每個選項,並使他們全部選擇因此它可以保存每個框中的值。 – SentOnLine