asp.net-mvc - 无法正确访问值下拉列表 asp mvc
问题描述
我是 asp mvc 的新手,所以我试图了解如何从下拉列表中获取选定的值。现在我想要在我的视图中将选定的值视为文本。在搜索了几个示例后,我在控制器中有以下代码:
public ActionResult Index()
{
TaskModel task = new TaskModel();
task.Tasks = FillTaskList();
return View(task);
}
[HttpPost]
public ActionResult Index(TaskModel task)
{
task.Tasks = FillTaskList();
ViewBag.Message = task.TaskName;
return View(task);
}
private static List<SelectListItem> FillTaskList()
{
List<SelectListItem> items = new List<SelectListItem>();
string constr = ConfigurationManager.ConnectionStrings["contingentConnectionString"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
string query = " SELECT TaskId, TaskName FROM Task";
using (SqlCommand cmd = new SqlCommand(query))
{
cmd.Connection = con;
con.Open();
using (SqlDataReader sdr = cmd.ExecuteReader())
{
while (sdr.Read())
{
items.Add(new SelectListItem
{
Text = sdr["TaskName"].ToString(),
Value = sdr["TaskId"].ToString()
});
}
}
con.Close();
}
}
return items;
}
这是我的看法:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@model WebApplication1.Models.TaskModel
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
</head>
<body>
<div>
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
<div class="form-group">
@Html.DropDownListFor(m => m.TaskId, Model.Tasks, "--Select task--", null)
</div>
<button type="Submit" class="btn btn-success submit">Send</button><br/>
<span style="color:green">@Html.Raw(ViewBag.Message)</span>
}
</div>
</body>
</html>
这是我的模型:
namespace WebApplication1.Models
{
public class TaskModel
{
public List<SelectListItem> Tasks { get; set; }
public int TaskId { get; set; }
public string TaskName { get; set; }
}
}
问题是我在这里不断得到 null 而不是“TaskName”值,
ViewBag.Message = task.TaskName;
但
ViewBag.Message = task.TaskId;
正在正确处理,我可以在 ViewBag.Message 中看到它。我究竟做错了什么?
解决方案
您的问题:在您的操作 POST 中,它仅从下拉列表中映射 TaskId,您需要在 TaskList 中进行过滤以检查列表中的选定任务。如果在列表中选择了任务,则设置ViewBag.Message = selectedTask.Text
您需要更新 POST 的操作代码:
[HttpPost]
public ActionResult Index(TaskModel task)
{
task.Tasks = FillTaskList();
var selectedTask = task.Tasks.FirstOrDefault(c => c.Value == task.TaskId.ToString());
if (selectedTask != null)
{
ViewBag.Message = selectedTask.Text;
}
return View(task);
}
推荐阅读
- android - org.xml.sax.SAXParseException;行号:1;列号:1;序言中不能有内容。还没有配置的错误
- javascript - 如何使用 gio js 将地球颜色从黑色变为白色
- google-apps-script - Gmail 应用程序脚本在转发前编辑正文
- amazon-web-services - 从 asp.net core webapi 使用 aws cognito 时出现内部服务器错误
- delphi - TScreen->Forms 显示意外的额外表单
- c# - 为什么我无法访问私有字段,即使我有自动实现的属性 { get; 放; }?
- here-api - 在哪里可以找到 Toll Cost Extension HERE API 文档?
- java - JavaMail 库中的 winmail.dat 附件解析
- python - 在 setup.py 安装期间动态复制包数据
- r - 是否可以更新 BSTS 模型?