1

我需要 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。

4

3 回答 3

3

我没有构建一个SelectListItem,而是构建了这样的东西:

public struct BookItem
{
   int id;
   string name;
}

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

IEnumerable<BookItem> bookList {get; set;}

最后

@Html.DropDownListFor(model => model.Book.PublicherId, new SelectList(Model.bookList, "id", "name"))
于 2012-12-10T13:51:10.887 回答
0

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

于 2012-06-27T17:45:50.830 回答
0

首先,您可以将映射代码简化为

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

在视图中你可以做

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

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

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

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

于 2012-06-27T17:48:34.833 回答