2010-02-24 104 views
2

我是一名ASP.NET MVC新手,並嘗試將下拉列表與數據庫中的數據綁定。我正在製作一個計算機數據包計算器應用程序,基本上用戶可以從下拉列表中選擇他/她想要進入他/她的計算機數據包的組件,然後將訂單發送到電子郵件中。組件必須來自數據庫。ASP.NET MVC下拉列表

我不熟悉MVC模型,所以我不太清楚應該在哪個文件夾中放置應用程序的哪一部分。現在我有

-Controllers:

--HomeController

-Models

--HomeRepository

--IHomeRepository

--database。 dbml(現在我只使用一個名爲prod的表UCT和我需要有

PRODUCT_DESCRIPTION和PRODUCT_PRICE)

-views

- 家居

----指數

的信息---- ...等...

我已經設法從產品表中的所有產品列入項目符號列表a nd在索引頁面顯示它。所以,我的HomeRepository從Database.dbml中創建一個數據上下文。還有一個公共的IList ListAll()方法(?),其中寫入了搜索語句。 IHomeRepository只有

public interface IHomeRepository 
{ 
    IList<product> ListAll(); 
} 

不知何故,它有效,一段時間我很高興。我試圖填充一個下拉列表中的索引頁是這樣的:

<% foreach (product m in (IENumerable)ViewData.Model 
{ 
    Html.DropDownList("processor"m new[] { 
    new SelectedListItem { Text = m.product_description, Value m.product_description }, "Select a processor") 
    } 
} 

但只顯示儘可能多的下拉列表,因爲我得到的搜索句子產品,它顯示在每一個列表只有一個結果。

我該怎麼辦?或者我應該如何構建這種應用程序?也許Web窗體應該更容易做到這一簡單的應用程序,但我需要嘗試使用極限編程的方法,包括測試驅動開發,並且我明白這對於Web窗體來說是不可能的。那麼,這個XP是另一回事......

非常感謝。

+0

關於此問題的好文章:http://www.277hz.co.uk/Blog/Show/7/image-uploading-in-asp-net-mvc – 2011-06-02 19:03:58

回答

4

假設你的操作是這樣的:

public ActionResult Index() 
{ 
    IEnumerable<Product> products = Repository.ListAll(); 
    return View(products); 
} 

以及相應的視圖是強類型到IEnumerable<Product>

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<System.Collections.Generic.IEnumerable<YourNamespace.Product>>" %> 

你不需要使用foreach語句來產生下拉框中:

<%= Html.DropDownList("processor", Model.Select(p => new SelectListItem { 
    Text = p.product_description, 
    Value = p.product_id 
})) %> 
0

感謝您的回答,Darin。我嘗試過,但它沒有得到它的工作。但嘗試時,我發現了另一個有效的例子。現在我的指標是這樣的:

[...] 
    <% using (Html.BeginForm()) { %> 
     <table> 
      <tr> 
      <td>Processor</td> 
      <td><%= Html.DropDownList("lstProcessor1", new SelectList((IEnumerable)ViewData["Processor1List"], "product_price", "product_description")) %></td> 
      </tr> 
      <tr> 
      <td>Total Amount</td> 
      <td>0,00 €</td> 
      </tr> 
     </table> 
     <input type="submit" value="Submit" /> 
    <% } %> 
    [...] 

而且HomeController中的開頭:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Mvc.Ajax; 
using MvcApplication1.Models; 

namespace MvcApplication1.Controllers 
{ 
    [HandleError] 
    public class HomeController : Controller 
    { 
     // Connect database 
     DB50DataContext _ctx = new DB50DataContext(); 

     // GET: /Home/ 
     public ActionResult Index() 
     { 
      // Search: Processors 
      var products = from prod in _ctx.products 
          where prod.product_searchcode == "processor1" 
          select prod; 

      ViewData["Processort1List"] = products; 

      return View(); 
     } 

所以我不使用存儲庫現在,用那種解決方案,我知道我可以寫裏面的公共查詢ActionResult Index()獲取其他組件,但我認爲這不是它應該的方式?這些數據庫查詢不應該在別的地方嗎?該應用程序將只有家庭文件夾,所有頁面都在裏面。

我還有下拉列表的另一個問題:是否有可能在Text屬性中顯示product_description和product_price?我嘗試了「product_description + product_price」類的東西,但當然不起作用。