使用MVC将数据添加到数据库 - 具有FK关系

时间:2010-07-20 08:31:49

标签: c# asp.net-mvc asp.net-mvc-2 linq-to-entities

我有一个数据库,我正在使用Linq 2 Enities的实体框架。我正在使用ASP.NET MVC 2。

我有一个包含两个表的数据库,如下所示:

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

显然,当用户添加新的分类时,当他们选择类别时,他们不希望看到CatID,所以我的问题就是这个。如何通过选择CatName?

让用户添加分类

我正在使用强类型视图。重组数据库是不可能的。用C#回答。

谢谢,

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

从数据库中获取现有类别(最好通过存储库,但为了简洁起见,我只显示Linq to Entities查询):

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

通过视图模型将这些视频转发到您的视图。在您的视图中,您以某种方式输出表单以使用户能够添加分类。您没有为类别ID提供文本框(或选择列表),而是为它们提供一个选择列表,其中是id,但 text / inner 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对象和所有现有类别的两个属性。

答案 2 :(得分:0)

我已经提出了这个解决方案:

控制器:

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

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

查看:

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

这就简单了,它运作正常!

相关问题