asp.net-mvc - 如何将下拉列表的值从视图传递到控制器?
问题描述
如何捕捉显示粗体样式的下拉列表的值?我需要将下拉列表的选定值从视图传递到控制器。我不知道如何通过。我在视图中使用了模型。我想我无法抓住价值。我添加了我的视图并在下面创建了控制器。
这是我的 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);
}
解决方案
您可以使用 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")
推荐阅读
- linux - 是否需要使用 .PHONY 列出所有虚假目标?
- python - Jupyter:删除信息和单元格后恢复单元格信息
- github - Github:存储库>项目与组织/用户>项目
- swift - 如何在 Ubuntu VSCode 中获得 SwiftVapor 的自动完成功能
- arduino - 如何在 arduino 中延迟压电蜂鸣器的声音
- python - 从 2D 列表到 dict 时解包的值太多(预期为 2)?(Python)
- javascript - 无法使用 node.js 中的应用程序从扩展模块调用基本模块
- javascript - 为什么 this.key 在 JavaScript 中不能正常工作?
- matlab - 根据给定的输入数字更新 gui 表
- python - 关闭屏幕会杀死 tkinter,从而杀死我的 Python 闹钟。怎么修?