2011-05-25 64 views
1

我有一個MVC 3項目,並堅持視圖綁定到模型Post上。MVC:綁定動態選擇列表返回到ViewModel在郵政

這裏是我的模型:

public class DBViewModel 
{ 
    public ProductionDatabasesViewModel PDBViewModel { get; set; } 
    public IList<string> SelectedNames { get; set; } 

    public DBViewModel() 
    { 
    SelectedNames = new List<string>(); 
    PDBViewModel = new ProductionDatabasesViewModel(); 
    } 
} 

我的觀點:(砍倒版)

@model Web.Models.DBViewModel 
@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 
    <fieldset> 
     @Html.ListBoxFor(x => x.SelectedNames, new SelectList(Model.SelectedNames)) 
     <input id="button-submit" name="SubmitButton" type="submit" value="Submit" /> 
    </fieldset> 
} 

片段的控制器:

[HttpPost] 
    public ActionResult Database(DBViewModel model) 
    { 
    var users = model.SelectedNames; //<---- empty, the count is 0 always. 
    } 

在視圖中有從自動填充框中選擇用戶,然後從jQuery腳本中選擇用戶的能力t會將選定的名稱添加到上面視圖中的列表中。這一切都有效,所以我可以搜索用戶,然後單擊添加按鈕將用戶添加到列表中。但是當點擊提交按鈕時,我遇到了問題。視圖中添加的用戶(視圖中的選擇列表)不綁定到模型。所以在發佈model.SelectedNames是空的。我也嘗試了Request [「SelectedNames」]和Request.Form [「SelectedNames」],它們都是null。

我在正常的webforms非常有經驗,但仍然學習MVC,所以任何幫助將不勝感激。

[更新]

我會更新的問題進一步明天我的時間,但現在看來,如果我選擇他們,是在列表中的項目將被綁定到視圖模型。明天我會明白這一點。但非常感謝所有評論,幫助和建議。

+0

我想你想要這樣的東西http://stackoverflow.com/questions/3194143/challenges-with-selecting-values-in-listboxfor/3195986#3195986 – Ryan 2011-05-25 03:02:42

+0

@Ryan - 沒有不幸的不是。這並不能解決在帖子期間將表單值綁定回模型的問題。 – Ryk 2011-05-25 03:31:18

回答

1

好吧,我已經找到了問題所在。如果要在HTML中將多個選擇元素綁定到模型中,則必須先選擇這些項目。非常討厭,但這似乎是它想要的方式。

所以,如果你有一個像一個選擇框:

<select id="selected-ad-users-list" name="SelectedNames" multiple="multiple" size="5" 
     style="width: 100%"> 
</select> 

你添加項目,從任何地方真的,在我來說,我有另外的列表/或文本框,他們在鍵入一個名稱,然後我用jQuery來填充這個選擇列表。我需要做的是添加一些jQuery腳本來旋轉我的列表並選擇所有項目。所以一旦選擇了這些項目,它就會將它們綁定到模型上。

這裏是一個很好的文章:select all or some items in a select box

我真的希望這可以幫助別人。

+0

我一直有完全相同的問題,這是迄今爲止我發現的最佳解決方案 – Macros 2012-02-03 09:43:25

3

這是否Does the Model Binder in ASP.NET MVC Beta Support List<T>?回答你的問題?字符串列表是一個更簡單的版本。

+0

同意,應該這樣做。 – Paul 2011-05-25 04:58:45

+0

這對MVC 3沒有改變嗎?更容易,更好的支持? – Ryk 2011-05-25 06:41:41

+0

另請參閱我在下面給亞歷山大的評論。我沒有問題編程加載數據,然後在發佈期間將其恢復,似乎當我使用jQuery將新值添加到HTML選擇列表時,我無法獲取值。這有道理嗎? – Ryk 2011-05-25 06:47:13

1

不得不說這個截斷你的代碼的版本,因爲它應該。 SelectedNames列表在提交後成功從列表框填充。你可以自己檢查一下。雖然我做了幾處更改:

  • 刪除了所有對ProductionDatabasesViewModel的引用;
  • 更改返回類型的POST版本數據庫方法爲void;
  • 添加數據庫方法

的GET版本:

public ActionResult Database() 
{ 
    return View(new DBViewModel { SelectedNames = { "a", "b", "c" } }); 
} 

所以我相信你有一個bug somethere別人,而不是在這些部位。

+0

是的,即使對我來說也行,但我的問題不是當我編程創建列表並添加它時,似乎問題是列表在加載時是空的,然後我動態添加條目以使用jQuery。所以當我提交表單時,我找不到值。 – Ryk 2011-05-25 06:45:56

+0

您可以優化您的問題並顯示如何使用jQuery將條目添加到列表中? – 2011-05-25 06:50:41

+0

好的,會的,但我認爲我遇到了這個問題,我會更新我的問題。問題似乎是,當我添加一個新的SelectList項目時,它只會將它添加到後期綁定,如果它們被選中。我明天會更新它,但非常感謝迄今爲止的幫助。 – Ryk 2011-05-25 11:15:51