【问题标题】:populating a drop down from a database从数据库中填充下拉列表
【发布时间】:2011-11-09 13:46:16
【问题描述】:

所以我正在编写一个基本的模拟网站(我的第一个),并且我正在尝试从数据库表中填充一个列表。

在我的控制器中有;

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();
    }
}

}

【问题讨论】:

  • 到底是什么问题?如果您可以提供您收到的错误消息或现有行为与所需行为之间差异的描述,这将非常有用。

标签: c# html asp.net-mvc database drop-down-menu


【解决方案1】:

如果您的视图是强类型的,您可以使用帮助器:

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

bloodtype 是值,bloodtypelistList&lt;T&gt;,其中包含从控制器中的数据库填充的所有值。

编辑:

尝试以下方法:

<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();

【讨论】:

  • 不幸的是,它的类型很弱,所以我认为这是不可能的。
  • 你给我的代码也会出现同样的错误信息。数据库中的数据类型是一个 nvarchar ,它与我所知道的字符串相同,所以我的暗示是它与对象的定义有关,但我看不出哪里出错了。
  • 您是否在 View(); 之前在控制器中加载了 patientInit()?
  • 不,在控制器中的代码之后,它以 return View(); 结束
【解决方案2】:

如果您使用强类型视图,您的生活会变得更加轻松,但是您可以在没有它们的情况下创建一个下拉列表。看看 Html.DropDownList 的签名

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

【讨论】:

    猜你喜欢
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2016-01-09
    • 1970-01-01
    相关资源
    最近更新 更多