首页 > 解决方案 > 如何将下拉列表的值从视图传递到控制器?

问题描述

如何捕捉显示粗体样式的下拉列表的值?我需要将下拉列表的选定值从视图传递到控制器。我不知道如何通过。我在视图中使用了模型。我想我无法抓住价值。我添加了我的视图并在下面创建了控制器。

这是我的 Create.cshtml

@model LanguageSchool.Models.Class_Students

@{
    ViewBag.Title = "Create";
    Layout = "~/Views/Shared/_Layout.cshtml";
}



@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Ders Kayıt Ekranı</h4>
        <hr />

        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.ClassId, "Ders Adı ve Fiyatı", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("ClassId", null, htmlAttributes: new { @class = "form-control" })
                @Html.ValidationMessageFor(model => model.ClassId, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.StudentId, "Öğrenci Adı", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("StudentId", null, htmlAttributes: new { @class = "form-control" })
                @Html.ValidationMessageFor(model => model.StudentId, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            <label class="control-label col-md-2">Taksit Sayısı</label>
            **<div class="col-md-10">
                @Html.DropDownList("SelectedItem", (IEnumerable<SelectListItem>) ViewData["ListItems"],new {@class="form-control"})
            </div>**
        </div>




<div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" value="Kayıt" class="btn btn-success" />
                    @Html.ActionLink("Geri Dön", "Index", "", new { @class = "btn btn-primary" })
                </div>
            </div>
    </div>
}

这是我的控制器

public ActionResult Create()
        {
            List<SelectListItem> items = new List<SelectListItem>();
            items.Add(new SelectListItem(){Text = "1",Value = "1"});
            items.Add(new SelectListItem(){Text = "2",Value = "2"});
            items.Add(new SelectListItem(){Text = "3",Value = "3"});
            items.Add(new SelectListItem(){Text = "4",Value = "4"});
            items.Add(new SelectListItem(){Text = "5",Value = "5"});
            items.Add(new SelectListItem(){Text = "6",Value = "6"});

            ViewData["ListItems"] = items;

            var student = db.Students.ToList();
            IEnumerable<SelectListItem> selectList = from t in student
                select new SelectListItem
                {
                    Text = t.Firstname + " " + t.Lastname,
                    Value = t.Id.ToString()
                };

            var myClasses = db.Classes.ToList();
            IEnumerable<SelectListItem> selectListClass = from t in myClasses
                select new SelectListItem
                {
                    Text = t.Name + " - " + t.Price + " TL",
                    Value = t.Id.ToString()
                };

            ViewBag.ClassId = new SelectList(selectListClass, "Value", "Text");
            ViewBag.StudentId = new SelectList(selectList, "Value", "Text");
            return View();
        }


        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "Id,ClassId,StudentId,SelectedItem")] Class_Students class_Students)
        {

            if (ModelState.IsValid)
            {
                db.Class_Students.Add(class_Students);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewBag.ClassId = new SelectList(db.Classes, "Id", "Name", class_Students.ClassId);
            ViewBag.StudentId = new SelectList(db.Students, "Id", "City", class_Students.StudentId);
            return View(class_Students);
        }

标签: asp.net-mvcentity-frameworkmodel-view-controller

解决方案


您可以使用 DropdownlistFor。

ViewBag 中也没有模型数据,而是将其添加到模型中。

模型:

public class StudentsViewModel{
   public int StudentId {get;set;}
   IEnumerable<SelectListItem> Students {get;set;}
   //... other props

   public StudentsViewModel(){
       Students = db.Students.Select(t=> select new SelectListItem
            {
                Text = t.Name + " - " + t.Price + " TL",
                Value = t.Id.ToString()
            }).ToList();
   }
}

看法:

 @Html.DropDownListFor(m => m.StudentId , Model.Students , "Please Select")

推荐阅读