下拉列表的第一个元素没有被选中
本文关键字:第一个 元素 下拉列表 | 更新日期: 2023-09-27 18:12:57
我有一个下拉框,由数据库中的条目填充。但是DropDownList中的第一个值不起作用。请帮帮我吧
@model IEnumerable<MvcApplication.Models.Bookinfo>
@{
ViewBag.Title = "NewRequest";
}
<h2>NewRequest</h2>
@using (@Html.BeginForm("Reserve","Book" ))
{
<table>
<tr>
<td>
@Html.DropDownList("Bookname",Model.Select(m => new SelectListItem()
{Text = m.Bookname, Value = m.Bookname }).ToList())
</td>
</tr>
<tr>
<td>
<input type = submit value="Reserve">
</td>
</tr>
</table>
}
实际上它给出的是空值。我可以这样做吗?把一些随机文本作为列表的第一个元素,比如"select a book",然后从第二个元素
开始列表现在我面临另一个问题。它不能预订任何新创建的图书。我似乎不知道是什么问题
public ActionResult Reserve(string bookname,Issued issue)
{
try
{
using (var db = new Database1Entities1())
{
var bookID= (from some in db.Bookinfoes where some.Bookname==bookname select some.Id).First();
// var issueddate = (from issuedate in db.Issueds where issuedate.BookId == bookID select issuedate.date).First();
if (db.Issueds.Where(i=>i.BookId == bookID).FirstOrDefault().BookId != 0 )
{
return RedirectToAction("AlreadyReserved");
}
var date = DateTime.Now.Date;
issue.BookId = bookID;
issue.date = date;
db.Issueds.Add(issue);
db.SaveChanges();
}
}
catch
{
return RedirectToAction("Index");
}
return View();
}
总是捕捉异常并返回到索引页
您应该给BookId作为值,如下所示:-
@Html.DropDownList("Bookname",Model.Select(m => new SelectListItem()
{Text = m.Bookname, Value = m.BookId}).ToList())
可以设置第一个SelectListItem
的Selected
属性为true。由于您已经使用LINQ-Expression来构建列表,您可以使用如下内容(传递给Select
的lambda表达式中的第二个参数接收元素的索引…):
@Html.DropDownList("Bookname", Model.Select((m,i) => new SelectListItem
{Text = m.Bookname, Value=m.Bookname, Selected = i==0}).ToList())
Edit:如果您想要将一些任意文本作为您的第一项(如"选择一本书"),您可以通过在您的书籍前面添加额外的SelectListItem
来实现这一点。这可以使用一些"LINQ魔法"来完成,比如:
@Html.DropDownList("Bookname",
Enumerable.Repeat(new SelectListItem {Text = "Select a book", Value=null, Selected=True}, 1)
.Concat(Model.Select((m,i) => new SelectListItem
{Text = m.Bookname, Value=m.Bookname}))
.ToList())
注意:Enumerable.Repeat
用于创建只包含一个元素的序列。同样,在这种情况下,您可以将第一个元素的Selected
属性设置为True
,并将其保留为False
。