2012-06-27 79 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"))