C# 转换下拉列表项';s值为int
我需要SelectListItem的值为int 所以我从数据库中提取它,在过程中将它转换为字符串,并存储为listitem的值C# 转换下拉列表项';s值为int,c#,asp.net-mvc-3,entity-framework-4,razor,drop-down-menu,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
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
});
}
}
最后,控制人:
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。当DropDownList的选定项将被发回时,将其从字符串转换为int,如convert.ToInt32(DropDownSelectedItem)或使用Int32.TryParse(value,out number)开始时,您可以简化映射代码到
db
.PublisherSet
.Select(x=> new SelectListItem{Value = x.Id.ToString(), Text = x.Name})
.ToArray();
在视图中,您可以执行以下操作:
@Html.DropDownListFor(model => model.Book.PublisherId, Model.items);
它将正确地呈现一个选择元素,并选择相应的选项和发布者
然后,当用户单击submit按钮时,可以使用模型绑定约定将其传递回控制器操作
最后,都是文字。这就是网络的本质。我们有很多技巧、转换器和活页夹来将字符串字典转换为丰富的视图模型,但最终它只是字符串。我没有构建
SelectListItem
,而是构建了如下内容:
public struct BookItem
{
int id;
string name;
}
然后将以下项目添加到模型中并选择数据
IEnumerable<BookItem> bookList {get; set;}
您的映射代码只是导致:LINQ到实体无法识别方法'System.String ToString()'方法,并且此方法无法转换为存储表达式。我对LINQ表达式不感兴趣,它做的是正确的。我需要第二个片段来将值转换为int。模型绑定应该自动为您执行此操作。您能详细说明一下吗?我具体在哪里进行转换?例如:当您将数据发布回控制器/操作时,您可以进行转换。我希望我可以在model=>model.Book.publisherid上执行一些linq魔术,您如何将其接受到控制器中?如果命名合适,模型绑定可能会将其作为整数接受。您是否提交了完整的表格?您可能可以执行类似@Html.DropDownListFor(x=>Convert.ToInt32(x.Book.PublisherId)、Model.Items)的操作;但这只会给你的应用程序增加另一个故障点。我已经添加了控制器代码。。我将尝试您建议的转换,并让您知道,如果您对BookAdd模型具有适当的属性,resultsMVC模型绑定应该为您处理转换。你试过没有任何显式转换吗?如果你做了,结果如何?
IEnumerable<BookItem> bookList {get; set;}
@Html.DropDownListFor(model => model.Book.PublicherId, new SelectList(Model.bookList, "id", "name"))