2014-10-18 30 views
0

選定值在我的觀點之一,我添加一個下拉列表,我這個下拉我的數據庫這樣的綁定..如何保存從下拉列表數據庫在ASP.NET中使用實體框架MVC 4

public ActionResult PostMarks() 
{ 
    JoinMod std = new JoinMod(); 
    std.Drp_bind = (from nm in db.TbStudent 
        select new SelectListItem 
        { 
         Text = nm.StudentName, 
         Value = SqlFunctions.StringConvert((double)nm.StudentId).Trim() 
        }).ToList<SelectListItem>(); 

    return View(std); 
} 

這裏是

<p>StudentName</p> 
    @Html.DropDownList("StudentName",Model.Drp_bind,"Select") 

而且在Post我試圖將數據保存到數據庫中這樣

[HttpPost] 
public ActionResult PostMarks(Marks marks) 
{ 
    db.TbMarks.Add(marks); 
    db.SaveChanges(); 

    return RedirectToAction("ShowAllMarks"); 
} 
在我看來,下拉列表

現在,當我在將數據保存到數據庫後檢查數據庫時,數據庫中的Id保存在下拉列表中爲零。請高手幫我解決這個問題

回答

0

你應該使用@HTML.DropDownListFor,指定一個lambda表示你的模型中哪個屬性要將列表的選定值綁定到POST上。

鑑於像這樣一個視圖模型:

public class MarksViewModel 
{ 
    public Marks Marks { get; set; } 
    public IEnumerable<SelectListItem> Drp_bind { get; set; } 
} 

下拉列表中CSHTML可以聲明如下所示:

@Html.DropDownListFor(m => m.Marks.StudentId, m.Drp_bind, "Select a Student") 

第一個參數是描述你的模型的屬性的表達式您希望從後發佈的下拉列表中填充選定的值。第二個是包含我們需要綁定數據的值的列表。

請注意,您的CSHTML將需要更多的表單字段,綁定到Marks屬性的其他屬性。

您的POST方法現在將以MarksViewModel作爲參數,並從中提取Marks屬性以添加到DbContext進行保存。

+0

如何指定lambda表達式這種類型的數據綁定,我試圖用拉姆達的,但我的下拉列表顯示我空這樣我使用 @ Html.DropDownListFor(M => m.Drp_bind,新的List ( )) – 2014-10-20 06:36:40

+0

我編輯了一個更完整的答案。它還沒有接近真正的編譯器,所以請原諒任何問題。 – 2014-10-20 08:45:08

相關問題