2012-06-27 44 views
1

我需要SelectListItem的值为int。将下拉列表项的值转换为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 
       }); 
    } 
} 

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

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

而且finaly CONTROLER:

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

你如何接受控制器?如果命名适当,模型绑定可能会将它作为整数接受。您是否提交整个表单?你可以做一些像@ Html.DropDownListFor(x => Convert.ToInt32(x.Book.PublisherId),Model.Items);但它只会给你的应用增加另一个失败点。 – parKing

+0

我已经添加了我的控制器代码..我将尝试您建议的转换,并让您知道结果 –

+0

如果您在BookAdd模型上具有适当的属性,MVC模型绑定应该为您处理转换。您是否尝试过没有任何明确的转换?如果你这样做,结果是什么? – parKing

回答

0

当DropDownList中的选择项将获得调回转换它像串为int这Convert.ToInt32(DropDownSelectedItem)或Int32.TryParse(值,出号)

+0

能否详细说明一下?我在哪里做转换? –

+0

示例:当您将数据发布回控制器/操作时,您可以进行转换 – HatSoft

+0

我希望我可以在model => model.Book.PublisherId –

0

开始你可以简化映射代码为

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

在视图中,你可以再做

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

,它会正确地渲染选项并选择合适的发行商选择元素。

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

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

+0

上执行一些linq魔术,您的映射代码只会导致:LINQ to Entities会不承认方法'系统。String ToString()'方法,并且此方法不能转换为存储表达式。 –

+0

我对Linq表达并不熟悉,它确实如此。我需要第二个剪切将值转换为int。 –

+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"))