2011-03-22 49 views
0

在我看來,我有一個下拉,我通過Ajax調用填充。此下拉列表位於表單內。然而,在提交時,我在formCollection中看不到這個控件。FormCollection不包含<select>控件添加在MVC Razor

還有一件事,或者當我嘗試添加Html.DropDownList(「AccountId」)時,出現錯誤 - 沒有包含'AccountId'鍵的'IEnumerable'類型的ViewData項目。

上市我的視圖和控制器代碼...

--View--

using (Html.BeginForm("GetNames", "Account", FormMethod.Post, new { id = "accountParameters" })) 
    { 
     .... 
     .... 
     <select id="AccountId" runat="server"></select> //This is not available in formcollection 
     //Html.DropDownList("AccountId"); //This throws exception 

     @:<p><input type='submit' value='Submit'/></p> 
    } 
    ... 
    ... 
<script> 
     $(document).ready(function() { 
      $.ajax({ 
       url: '/Account/GetAccounts', 
       type: "GET", 
       success: function (result) { 
        for (i = 0; i < result.length; i++) { 
         $('#AccountId').append($('<option></option>').val(result[i].accountId).html(result[i].name)); 
        } 
       } 
      }); 
     }); 
</script> 

- 控制器 -

public ActionResult GetAccounts(string id) 
{ 
    return Json(GetAccounts(), JsonRequestBehavior.AllowGet); 
} 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult GetNames(FormCollection formCollection) 
{ 
    if (("AccountId") != null) 
    {   
     .... 
     .... 
    } 

} 
+0

Ajax調用是否工作?即當頁面加載時填充的表單是什麼? – 2011-03-22 10:28:11

+0

是的。我在Select元素中獲得項目 – Vijay 2011-03-22 10:51:49

回答

5

元素需要name屬性被髮送回POST請求,你必須改變你的選擇像這樣(也放棄runat =「server」):

<select id="AccountId" name="AccountId"></select> 
+1

簡單但非常有效。萬分感謝!!! – Vijay 2011-03-22 11:50:55

0

如果您使用HTML助手創建下拉列表,則需要IEnumerable才能獲取選項。所以,在你的控制器,你可以做這樣的事情......

控制器

public ActionResult SomeAction() 
{ 
    ViewBag.SelectListItems = new List<SelectListItem>(); 
    //Stash your items in this list. 
} 

,並在視圖中......

Html.DropDownList("AccountId", Viewbag.SelectListItems); 

,但在你的情況,因爲你加載使用Ajax的選項,你最好不要使用助手。

相關問題