我是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; }
}
}
问题是我一直在这里获取空值而不是“ TaskName”值,
ViewBag.Message = task.TaskName;
但是
ViewBag.Message = task.TaskId;
处理正确,我可以在ViewBag.Message中看到它。我在做什么错了?
答案 0 :(得分:1)
您的问题:在操作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);
}
答案 1 :(得分:0)
使用Html.HiddenFor Helper方法以该属性的形式创建一个隐藏变量
@Html.HiddenFor(x => x.TaskName)
使用javascript设置所选文本
$(function () {
$("form").submit(function(){
var selText = $("#TaskId option:selected").text();
$("#TaskName").val(selText);
});
});
然后在控制器中即可获取
string value = model.TaskName;