2015-03-13 79 views
1

我在使用DropDownListFor幫助器在我想用於登錄的窗體中存在困難(安全性不在此處)。 我想,而不是要求用戶鍵入其用戶名,讓他從下拉列表中選擇它。DropDownListFor不直接連接到模型

但我無法設法使ASP.NET自動將我的模型的EmpName屬性設置爲下拉列表中的選定值。

這就是我所做的嘗試:

下面的方法顯示登錄頁面

[HttpGet] 
public ActionResult Index() 
{ 
    // Retrieving all users from DB 
    using (var db = new BidManagementContext()) 
    { 
     var users = from u in db.LOGIN 
        select u.EmpName; 

     ViewBag.AllUsers = new SelectList(users.ToList()); 
     return View(); 
    } 
} 

而這些都是從視圖中的某些行:

<div class="form-group"> 
    @Html.LabelFor(model => model.EmpName, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.DropDownListFor(model => model.EmpName, ViewBag.AllUsers as SelectList, new { @class = "form-control" }) 
    </div> 
</div> 

,如何用我做了一些事情,當ASP.NET嘗試將下拉選定值綁定到模型時,出現錯誤:

「System.InvalidOperationException」類型的異常出現在System.Web.Mvc.dll程序,但在用戶代碼中沒有處理

附加信息:有是有鑰匙'類型的無ViewData的項目「的IEnumerable」 EmpName」。

我不知道這裏做什麼: -/

+0

這意味着'ViewBag.AllUsers'爲空。可能您在提交後返回視圖,但不會重新分配「SelectList」 – 2015-03-13 08:07:03

+0

您是否爲視圖定義了模型類型? – 2015-03-13 08:08:35

+0

@StephenMuecke哦,就是這麼簡單......我覺得有點愚蠢: -/ 您是否會在評論之外回覆帖子,以便我可以將您的答案upvote並標記爲解決方案? – Jeahel 2015-03-13 08:11:40

回答

2

錯誤消息意味着ViewBag.AllUsers值爲null。這可能是因爲您在提交後返回視圖,但不會重新指定SelectList。我建議重構代碼,以便將SelectLists填充爲可以在GET和POST方法中調用的私有方法(如果返回視圖)。

編輯(例如添加)

HttpGet] 
public ActionResult Index() 
{ 
    YourViewModel model = new YourViewModel(); 
    ConfigureViewModel(model); 
    return View(model); 
} 

[HtppPost] 
public ActionResult Index(YourViewModel model) 
{ 
    if (!ModelState.IsValid) 
    { 
    ConfigureViewModel(model); 
    return View(model); 
    } 
    // Save and redirect 
} 

private void ConfigureViewModel(YourViewModel model) 
{ 
    using (var db = new BidManagementContext()) 
    { 
    var users = from u in db.LOGIN select u.EmpName; 
    ViewBag.AllUsers = new SelectList(users.ToList()); 
    // or better, model.AllUsers = new SelectList(users.ToList()); 
    } 
    // any other common operations 
} 
+0

謝謝,這就是它! – Jeahel 2015-03-13 08:34:28

+0

你會發布結果代碼 – 2015-03-13 12:16:42

+0

@ARIFYILMAZ,完成。 – 2015-03-13 12:26:06