Asp.net mvc 4 显示列表框中的选定值(MVC)

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]

我有一个数据库,它由表“Jobs”组成:job_id(int,主键),job_nm(nchar(50))。 在“Model”文件夹中,我添加了ADO.NET实体数据模型

控制器为:

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