2010-07-20 45 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