DropdownList的第一个元素未被选中

时间:2014-07-14 05:05:18

标签: c# asp.net asp.net-mvc-4

我有一个下拉框,由数据库中的enteries填充。但是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>
}

Actualy它给出了空值。我可以这样做,把一些随机文本作为列表的第一个元素,如&#34;选择一本书&#34;并从第二个元素

开始列表

现在我面临另一个问题。它无法保留任何新创建的书籍。我似乎无法弄清楚问题

 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();
    }

始终捕获异常并返回索引页

2 个答案:

答案 0 :(得分:1)

您应该将BookId作为值,如下所示: -

 @Html.DropDownList("Bookname",Model.Select(m => new SelectListItem() 
                              {Text = m.Bookname, Value = m.BookId}).ToList())

答案 1 :(得分:0)

您可以将第一个Selected的{​​{1}}个属性设置为true。由于您已经使用LINQ-Expression来构建列表,因此您可以使用类似的东西(传递给SelectListItem的lambda表达式中的第二个参数接收元素的索引...):< / p>

Select

修改:如果您想将一些任意文字作为第一项(例如&#34;选择一本书&#34;),您可以通过添加额外{{1}来实现这一目标在你的书前。这可以使用一些&#34; LINQ魔法&#34;像:

@Html.DropDownList("Bookname", Model.Select((m,i) => new SelectListItem
                   {Text = m.Bookname, Value=m.Bookname, Selected = i==0}).ToList())

注意:SelectListItem用于创建仅包含一个元素的序列。同样在这种情况下,您可以将第一个元素的@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保留在列表的其余部分。