【发布时间】:2019-02-22 19:03:55
【问题描述】:
我是 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 中看到它。我做错了什么?
【问题讨论】:
-
使用浏览器控制台或 Fiddler 或类似工具查看发布的有效负载。我希望您会发现
TaskId(来自下拉菜单)是有效负载中的唯一属性,或者至少是有效负载中唯一具有值的属性。 ASP.NET 模型绑定最好将 POSTed 值映射到您指定的类型——但它没有任何过去的状态。如果您考虑一下您的用例,TaskId是唯一需要回发的值。您应该使用回传的 ID 来查询该 TaskId 的最新值(包括TaskName)。 -
看来真的是这样,谢谢指教!
-
我的荣幸。欢迎来到 StackOverflow -- #SOReadyToHelp
标签: asp.net-mvc razor