无法正确访问值下拉列表asp mvc

问题描述 投票:1回答:2

我是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中看到它。我究竟做错了什么?

asp.net-mvc razor
2个回答
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);
 }

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;
© www.soinside.com 2019 - 2024. All rights reserved.