Asp.net mvc 4 显示列表框中的选定值(MVC)
我有一个数据库,它由表“Jobs”组成:job_id(int,主键),job_nm(nchar(50))。 在“Model”文件夹中,我添加了ADO.NET实体数据模型 控制器为:Asp.net mvc 4 显示列表框中的选定值(MVC),asp.net-mvc-4,Asp.net Mvc 4,我有一个数据库,它由表“Jobs”组成:job_id(int,主键),job_nm(nchar(50))。 在“Model”文件夹中,我添加了ADO.NET实体数据模型 控制器为: namespace ListBox_proj.Controllers { public class HomeController : Controller { myDBEntities1 db = new myDBEntities1(); [HttpGet]
namespace ListBox_proj.Controllers
{
public class HomeController : Controller
{
myDBEntities1 db = new myDBEntities1();
[HttpGet]
public ActionResult Index()`enter code here`
{
var jobs = db.Jobs;
ViewBag.Jobs = jobs;
return View(jobs);
}
[HttpPost]
public ActionResult Index(string sel1)
{
ViewBag.Result = sel1;
return View();
}
}
}
视图为:
@{
ViewBag.Title = "Index";
}
<html>
<head>
<meta name="viewport" content="width=device-width"/>
<title>Index</title>
</head>
<body>
<h1 class="label">Please, select the job you interested in:</h1> <br /><br />
<select name="sel1" id ="sel1">
<option>All</option>
@foreach (var j in ViewBag.Jobs)
{
<option><p>@j.job_nm</p></option>
}
</select>
<form action="/home/index" method="post">
<input type="submit" value ="Search">
<input type="text">@ViewBag.Result</input>
</form>
</body>
</html>
@{
ViewBag.Title=“Index”;
}
指数
请选择您感兴趣的工作:
全部的
@foreach(ViewBag.Jobs中的变量j)
{
@j、 工作地点
}
@查看包。结果
但当我在选择框中选择项目并按下“搜索”时,我收到错误消息:
!![在此处输入图像描述][1]
英语消息-对象引用未设置为对象的实例。
请帮帮我!我做错了什么?
我怎样才能更正它?这里有两个问题 第一个是
ViewBag.Jobs
仅在[HttpGet]
上填充;您需要确保ViewBag
也填充在[HttpPost]
中。更好的解决方案通常是使用适当的视图模型-例如
public class JobViewModel {
public Jobs JobsList { get; set; }
public string Result { get; set; }
}
只需在[HttpGet]
和[HttpPost]
过程中填充它,并将其传递到视图()
调用中。然后添加:
@model JobsViewModel
位于视图顶部,允许您通过(强类型)Model.JobsList
属性访问它
您将遇到的第二个问题是,sel
没有被提交,因为它不在您的
标记的范围内-请记住,表单中提交的唯一信息是表单中包含的信息
将您的视图重新构造为:
<form action="/home/index" method="post">
<select name="sel1" id ="sel1">
<option>All</option>
@foreach (var j in Model.JobsList)
{
<option><p>@j.job_nm</p></option>
}
</select>
<input type="submit" value ="Search">
<input type="text">@Model.Result</input>
</form>
全部的
@foreach(Model.JobsList中的var j)
{
@j、 工作地点
}
@模型。结果
这个问题也应该解决。当您将作业作为模型发送到视图时,为什么要尝试使用
ViewBag
。