2011-09-03 176 views
1

因此,我正在編寫一個基本的模擬網站(我的第一個),我試圖從數據庫表中填充一個列表。從數據庫中填充一個下拉列表

在我的控制器中,

public void patientInit() 
    { 
     hospitalSQLEntities db = new hospitalSQLEntities(); 
     ViewData["bloodtypeList"] = db.bloodtypes.ToList(); 
     ViewData["doctorno"] = ""; 
     ViewData["wardno"] = ""; 
     ViewData["patientid"] = ""; 
     ViewData["patientname"] = ""; 
     ViewData["address"] = ""; 
     ViewData["gender"] = ""; 
     ViewData["bloodtype"] = 0; 
     ViewData["spam"] = ""; 
     ViewData["organs"] = ""; 
     ViewData["formmessage"] = ""; 
    } 

而且在我的網頁我寫這個

<label for="bloodtype">Blood Type:</label> 
       <select name="bloodtype" > 
          <% List<InAmberClad.Models.bloodtype> bloodtypeList = (List<InAmberClad.Models.bloodtype>) ViewData["bloodtypeList"]; 
           foreach (InAmberClad.Models.bloodtype st in bloodtypeList) 
           { 
          %> 
           <option value="<%= st.bloodcode%>" <%if (st.bloodcode==(String) ViewData["bloodtypeList"]) Response.Write("Selected"); %>>"><%Response.Write(st.meaning); %></option> 
          <% } %> 
           <option value="0" <%if ((Int32) ViewData["bloodtype"]==0) Response.Write("Selected"); %>></option> 
       </Select> 

任何幫助,將不勝感激我一直停留幾個小時,它變得非常沮喪!

編輯:錯誤代碼圍繞着foreach循環,它表示「NullReferenceException未被用戶代碼處理,對象引用未設置爲對象的實例」。

編輯:這是我所有的控制器代碼;

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using InAmberClad.Models; 

namespace InAmberClad.Controllers 
{ 
[HandleError] 
public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult patiententry() 
    { 
     return View(); 
    } 
    public void patientInit() 
    { 
     hospitalSQLEntities db = new hospitalSQLEntities(); 
     ViewData["bloodtypeList"] = db.bloodtypes.ToList(); 
     ViewData["doctorno"] = ""; 
     ViewData["wardno"] = ""; 
     ViewData["patientid"] = ""; 
     ViewData["patientname"] = ""; 
     ViewData["address"] = ""; 
     ViewData["gender"] = ""; 
     ViewData["bloodtype"] = 0; 
     ViewData["spam"] = ""; 
     ViewData["organs"] = ""; 
     ViewData["formmessage"] = ""; 
    } 

    public void patientNewButtPressed() 
    { 
     if (Request.Params["submitter"] == "New Patient") 
     { 
      ViewData["doctorno"] = ""; 
      ViewData["wardno"] = ""; 
      ViewData["patientid"] = "(System Specified)"; 
      ViewData["patientname"] = ""; 
      ViewData["address"] = ""; 
      ViewData["gender"] = ""; 
      ViewData["bloodtype"] = 0; 
      ViewData["spam"] = ""; 
      ViewData["organs"] = ""; 
      ViewData["formmessage"] = ""; 
     } 
    } 

    public void patientSearchByID() 
    { 
    } 

    public void patientSearchByName() 
    { 
    } 

    public void patientInsert() 
    { 
     hospitalSQLEntities db = new hospitalSQLEntities(); 
     int newid = 0; 
     if (db.patients.Count() == 0) 
      newid = 1; 
     else 
      newid = db.patients.Max(u => u.patientid) + 1; 
     patient newpatient = new patient(); 
     newpatient.patientid = newid; 
     newpatient.doctorno = Request.Params["doctorno"]; 
     newpatient.wardno = Request.Params["wardno"]; 
     newpatient.patientname = Request.Params["patientname"]; 
     newpatient.address = Request.Params["address"]; 
     newpatient.gender = Request.Params["gender"]; 
     newpatient.bloodtype = Request.Params["bloodtype"]; 
     newpatient.spam = Convert.ToInt32(Request.Params["spam"]); 
     newpatient.organs = Convert.ToInt32(Request.Params["organs"]); 
     db.AddTopatients(newpatient); 
     db.SaveChanges(); 
    } 

    public void patientUpdate() 
    { 
    } 

    public ActionResult hospitalSQL() 
    { 
     patientInit(); 
     if (Request.Params["submitter"] == "New Patient") 
      patientNewButtPressed(); 
     else if (Request.Params["submitter"] == "Search") 
     { 
      if (Request.Params["searchpatientid"].Length > 0) 
       patientSearchByID(); 
      else if (Request.Params["searchpatientname"].Length > 0) 
       patientSearchByName(); 
     } 
     else if (Request.Params["submitter"] == "Cancel") 
      patientInit(); 
     else if (Request.Params["submitter"] == "Save") 
     { 
      if (String.Compare(Request.Params["patientid"], "(System Specified)") == 0) 
       patientInsert(); 
      else 
       patientUpdate(); 
     } 
     return View(); 
    } 
} 

} 
+0

究竟是什麼問題?如果您可以提供您收到的錯誤消息或描述現有行爲與所需行爲之間的差異,這將非常有用。 – Trott

回答

1

如果你的看法是強類型,你可以使用一個幫手:

@Html.DropDownListFor(m => m.bloodtype, Model.bloodtypelist) 

哪裏bloodtype是價值和bloodtypelistList<T>保存在你的控制你的數據庫填充的所有值。

編輯:

嘗試以下操作:

<select name="bloodtype"> 
<% foreach (var st in (List<InAmberClad.Models.bloodtype>)ViewData["bloodtypeList"]) { %> 
    <option value="<%=st.bloodcode%>" <%if (st.bloodcode==(String)ViewData["bloodtypeList"]){%> selected<%}%>><%=stmeaning%></option> 
<% } %> 
    <option value="0" <%if ((Int32)ViewData["bloodtype"]==0){%> selected<%}%>></option> 
</select> 

我猜它傳遞一個空列表視圖。

編輯:

在你的行動,View();前加patientInit();

+0

不幸的是它是弱類型的,所以我不認爲這是可能的。 – Rachel

+0

同樣的錯誤信息出現在你給我的代碼中。數據庫中的數據類型是一個nvarchar,它的行爲與我所知道的字符串相同,因此我的注意是它與定義對象有關,但我無法看到我要出錯的地方。 – Rachel

+0

您是否正在View()中加載控制器中的patientInit();? – jzm

0

你的生活將成爲您是否使用強類型的意見很容易,但是你可以創建一個沒有他們一個下拉列表。看一下Html的簽名.DropDownList

Html.DropDownList(
    string name, 
    IEnumerable<SelectListItem> selectList, 
    string optionLabel, 
    object htmlAttributes)