2011-09-03 6 views
1

Donc, j'écris un site Web fictif de base (mon premier) et j'essaie de remplir une liste à partir d'une table de base de données.remplir une liste déroulante à partir d'une base de données

Dans mon contrôleur j'ai;

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"] = ""; 
    } 

Et dans ma page, je l'ai écrit

<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> 

Toute aide à ce serait grandement apprécié que je suis coincé pendant des heures et il est super frustrant obtenir!

Editer: Le code d'erreur entoure la boucle foreach, il est dit que "NullReferenceException n'a pas été manipulé par le code utilisateur." La référence d'objet n'est pas définie sur une instance d'un objet. "

Editer: Voici tout le code de mon contrôleur;

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

Quel est exactement le problème? Ce serait très utile si vous pouviez fournir un message d'erreur ou une description de la différence entre le comportement existant et le comportement souhaité. – Trott

Répondre

1

Si votre opinion est fortement typé, vous pouvez utiliser un assistant:

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

bloodtype est la valeur et bloodtypelist est un List<T> qui détient toutes les valeurs peuplées de votre base de données dans votre contrôleur.

Edit:

les opérations suivantes:

<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> 

Je devine que cela passe une liste vide à la vue.

Edit:

Dans votre action, avant View(); ajouter patientInit();

+0

Malheureusement, il est faiblement typé, donc je ne pense pas que ce soit possible. – Rachel

+0

Le même message d'erreur arrive avec le bit de code que vous m'avez donné. Le type de données dans la base de données est un nvarchar qui agit comme une chaîne de ce que je sais donc je pense que cela a quelque chose à voir avec la définition de l'objet mais je ne peux pas voir où je vais mal. – Rachel

+0

Est-ce que vous chargez patientInit() dans le contrôleur avant View(); – jzm

0

Votre vie sera beaucoup plus facile si vous utilisez des vues fortement typées, mais vous pouvez créer une liste déroulante sans eux. Jetez un oeil à la signature pour Html.DropDownList

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