我需要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。
答案 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元素。
然后,当用户单击提交按钮时,您可以使用模型绑定约定将其传递回控制器操作。
最后,它是全文。这就是网络的本质。我们有很多技巧,转换器和绑定器将字符串字典转换为丰富的视图模型,但最终它只是字符串。