下拉列表的第一个元素没有被选中

本文关键字:第一个 元素 下拉列表 | 更新日期: 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())

可以设置第一个SelectListItemSelected属性为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