2010-07-20 50 views
0

我有一個數據庫,我正在使用Linq 2 Enities實體框架。我與ASP.NET MVC 2的工作使用MVC將數據添加到數據庫 - 使用FK關係

我有兩個表的數據庫,如圖所示波紋管:

Classifieds    Catergories 
ID(PK)     CatID(PK) 
CatID(FK)    CatName 
Desc 
... 

顯然,當用戶添加一個新的分類,當他們來接類別他們不我不想看到CatID的,所以我的問題是這樣的。我如何讓用戶通過選擇CatName來添加分類?

我正在使用強類型視圖。重組數據庫是不成問題的。請在C#中回答。

感謝,

回答

0

我想出了這個解決方案:

控制器:

var Catergories = classifiedsRepositry.GetClassifiedsCategories().AsEnumerable(); 

    ViewData["CatID"] = new SelectList(Catergories, "CatID" , "Category"); 

查看:

<%: Html.DropDownListFor(model => model.CatID, (SelectList)ViewData["CatID"],"--Pick A Category--")%> 

就是它死的簡單,它工作正常!

0

你可以使用下拉露出類別名稱,但使用的ID作爲值:

<%-- Using your Model has a list of Category objects set --%> 
<%= Html.DropDownList("classified.Category.Id", new SelectList(Model.Categories, "Id", "Name") %> 

你的控制器動作可能看起來像:

public ActionResult Save(Classified classified) 
{ 
    int categoryId = classified.Category.Id; 
} 
+0

是的,我在MS Access中做了類似的事情,所以我認爲這是要走的路。我只是不知道如何實現它。 非常感謝,我會給它一個去。 – SimonGates 2010-07-20 08:43:09

+0

我不能在selectList中做「Model.Catergories」,因爲我的模型是空的,因爲我正在添加數據,我試過了,我得到一個空引用異常。任何關於如何將catergories傳遞給視圖的想法我已經嘗試過ViewData。 – SimonGates 2010-07-20 09:19:28

+0

是的,這取決於你如何構建你的模型。您應該能夠使用ViewData詞典,因此在您的控制器中: ViewData [「Categories」] = categories; //可分類物品列表 然後在您的視圖中: <%= Html.DropDownList(「classified.Category.Id」,new SelectList((IEnumerable)ViewData [「Categories」],「Id」,「Name 「)%> – JonoW 2010-07-20 10:14:45

0

從數據庫中獲取現有類別(最好通過存儲庫,但爲了簡潔起見,我只顯示Linq to Entities查詢):

var db = new YourObjectContextImplementation(); 
var categories = db.Categories.AsEnumerable(); 

通過視圖模型將這些轉發到您的視圖。在你看來,你以某種方式輸出表單以使用戶能夠添加分類。您不會爲類別標識給他們一個文本框(或選擇列表),而是向他們提供一個選擇列表,其中值爲是標識,但文本/內部html是類別名稱。這樣,用戶只能看到名字,但是你的動作獲得一個傳遞給它的整數參數。


更新的迴應發表評論:

我假設您正在傳遞一個新的Classified對象視圖模型,然後使用EditorFor助手?一切都很好,但你應該換行Classified對象在特定視圖模型,例如ClassifiedAddModel如下:

public class ClassifiedAddModel 
{ 
    public Classified NewClassified { get; set; } 
    public IEnumerable<Category> ExistingCategories { get; set; } 
} 

然後你就可以實例化和填充在控制器動作ClassifiedAddModel對象,一起將它作爲模型視圖,並建立使用語法格式如

<%: Html.EditorFor(Model.NewClassified.Description) %> 
<%: Html.EditorFor(Model.Categories "CategoriesEditor") %> 

其中"CategoriesEditor"是需要分類和呈現一個選擇列表與他們的自定義視圖模型的名稱。但是,上述示例的要點是要顯示如何訪問Classified對象和所有現有類別的兩個屬性。

+0

我不能在selectList中做」Model.Catergories「,因爲我的模型是空的,因爲我正在添加數據,我試過了,我得到一個空引用異常。我試過ViewData的視圖。 – SimonGates 2010-07-20 09:31:26

+0

@simon,看我的更新。 – 2010-07-20 10:11:31