2013-08-26 86 views
0

即時通訊工作在mvc中,並在我的視圖中有一個窗體,它從我的viewmodel接收一個選擇列表以將值插入到我的下拉列表中。Mvc - 帶有視圖模型的表格

但提交表單沒有工作,我無法弄清楚它發生了什麼。

關於提交表單我得到null到我的數據庫。

有人可以幫我解決這個問題嗎?

這裏是我的代碼: VIEW:

model MyProject.Models.ViewModel 
@using(Html.BeginForm()) { 
    @Html.DropDownListFor(o => o.cp.Companylist,Model.cp.Companylist) 
    @Html.EditorFor(o => o.md.title) 
    @Html.EditorFor(o => o.md.edition) 
    @Html.EditorFor(o => o.md.number) 

    <input type="submit" name="submit" value="Add New"> 
} 

控制器:

public ActionResult Create() 
     { ViewModel vm = new ViewModel(); 
      return View(vm); 
     } 

     // 
     // POST: Create 

     [HttpPost] 
     public ActionResult Create(Mydata model) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Res.Add(model); 
       db.SaveChanges(); 
       return RedirectToAction("Index","AdminPanel"); 
      } 

      return View(model); 
     } 

型號:

public class ViewModel 
    { 
     public Mydata md { get; set; } 
     public Company cp { get; set; } 
    } 

MYDATA - 型號:

public class Mydata 
    { 
     public int ID { get; set; } 
     public string company_name{ get; set; } 
     public string title{ get; set; } 
     public string edition{ get; set; } 
     public string number{ get; set; } 
    } 
public class DefaultConnection : DbContext 
    { 
     public DbSet<Mydata> Res{ get; set; } 
    } 

公司 - 型號:

public class Company 
    { 
     public int id { get; set; } 
     public string name{ get; set; } 
     public SelectList Companylist{ get; set; } 

     public Company() 
     { 
      Companylist= GetCompanies(); 
     } 

     public SelectList GetCompanies() 
     { 
      var list = new List<SelectListItem>(); 
      string connection = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 

      using (var con = new SqlConnection(connection)) 
      { 
       con.Open(); 
       using (var command = new SqlCommand("SELECT * FROM MyCompanies", con)) 
       { 
        SqlDataReader reader = command.ExecuteReader(); 
        while (reader.Read()) 
        { 
         //string id = reader[0] as string; 
         string name_company= reader[1] as string; 
         list.Add(new SelectListItem() { Text = name_company, Value = name_company}); 
        } 
       } 
       con.Close(); 
      } 
      return new SelectList(list, "Value", "Text"); 
     } 
} 
+2

你正在創建一個視圖模型,但它的'md'和'cp'性能不會被初始化(據我可以看到)。這就是爲什麼當你在視圖中調用'o.cp.Companylist'時,'o.cp'爲空。 – haim770

+0

mhh ..好吧..我明白...我怎麼可以初始化他們? – user2232273

回答

1

的問題是,你要創建一個視圖模型,但它的mdcp性質不被初始化。這就是爲什麼當您在視圖中呼叫o.cp.Companylist時,o.cp爲空。

既然你想Create()你可能不想分配一個現有的數據到MyDataCompany,那麼你只需要確保這些屬性被初始化。你可以在ViewModel構造很容易做到這一點:

public class ViewModel 
{ 
    public ViewModel() 
    { 
     this.md = new Mydata(); 
     this.cp = new Company(); 
    } 

    public Mydata md { get; set; } 
    public Company cp { get; set; } 
} 
+0

這已經解決了我的下拉列表問題。我現在已經從數據庫中下載了值。但如果我提交表單插入我的表格中的值到我的表格,他插入null ..任何想法? – user2232273

+2

您現在遇到與'ModelBinding'不同的問題。我們必須看到你的「MyData」和「公司」代碼。 – haim770

+0

我已更新我的代碼。看看請 – user2232273