将Dropdownlist项的值转换为int

时间:2012-06-27 17:39:02

标签: c# asp.net-mvc-3 entity-framework-4 razor drop-down-menu

我需要SelectListItem的值为int。

所以我拉出数据库,在过程中将其转换为字符串并存储到listitem的值。

public class BookAdd
{
public BookAdd()
{
public Book Book { get; set; }
DataModelContainer db = new DataModelContainer();
IEnumerable<SelectListItem> items = db.PublisherSet
               .Select(i => new SelectListItem
               {
                 Value = SqlFunctions.StringConvert((double)i.Id), 
                 Text = i.Name
               });
    }
}

然后,当从下拉列表中选择时,我需要再次将值作为int存储到Book.PublisherId。我知道下面的代码不完整,我想我需要以某种方式将所选项的值转换为int,我该怎么做?

@model Bookshops.Models.BookAdd
...
@Html.DropDownListFor(model => model.Book.PublisherId, Model.items);

最终的控制者:

    public ActionResult Create2()
    {
        var bookAdd = new BookAdd();
        ViewBag.Publisher = bookAdd.items;
        return View(bookAdd);
    }

    //
    // POST: /Book/Create

    [HttpPost]
    public ActionResult Create2(BookAdd book)
    {
            if (ModelState.IsValid)
            {
                Book book2 = new Book();
                book2.Id = book.Book.Id;
                book2.AuthorId = book.Book.AuthorId;
                book2.Isbn = book.Book.Isbn;
                book2.Id = int.Parse(book.Book.PubId);
                book2.Title = book.Book.Title;
                book2.YearPublished = book.Book.YearPublished;

                db.BookSet.Add(book2);
                db.SaveChanges();
            }
            return RedirectToAction("Index");
    }

我使用的是MVC 3,EF 4。

3 个答案:

答案 0 :(得分:3)

我没有建立SelectListItem,而是建造了这样的东西:

public struct BookItem
{
   int id;
   string name;
}

然后将以下项目添加到模型中并选择数据

IEnumerable<BookItem> bookList {get; set;}

Fianally

@Html.DropDownListFor(model => model.Book.PublicherId, new SelectList(Model.bookList, "id", "name"))

答案 1 :(得分:0)

当DropDownList的选定项目将被回发时,将其转换为int,如此Convert.ToInt32(DropDownSelectedItem)或Int32.TryParse(value,out number)

答案 2 :(得分:0)

开始你可以简化映射代码

db
    .PublisherSet
    .Select(x=> new SelectListItem{Value = x.Id.ToString(), Text = x.Name})
    .ToArray();

在视图中,您可以执行

@Html.DropDownListFor(model => model.Book.PublisherId, Model.items);

它将正确呈现带有选项和选择适当发布者的select元素。

然后,当用户单击提交按钮时,您可以使用模型绑定约定将其传递回控制器操作。

最后,它是全文。这就是网络的本质。我们有很多技巧,转换器和绑定器将字符串字典转换为丰富的视图模型,但最终它只是字符串。