代码之家  ›  专栏  ›  技术社区  ›  SimonGates

使用MVC向数据库添加数据-使用FK关系

  •  0
  • SimonGates  · 技术社区  · 14 年前

    我有一个数据库,我正在使用带有Linq2特性的实体框架。我正在使用ASP.NET MVC 2。

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

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

    显然,当用户添加一个新的分类时,当他们选择分类时,他们不想看到CATID,所以我的问题是。如何让用户通过选择catname来添加分类?

    我使用的是强类型视图。重建数据库是不可能的。请用C回答。

    谢谢,

    3 回复  |  直到 14 年前
        1
  •  0
  •   JonoW    14 年前

    可以使用一个下拉列表来显示类别名称,但使用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;
    }
    
        2
  •  0
  •   Tomas Aschan    14 年前

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

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

    通过视图模型将它们转发到视图。在您的视图中,您以某种方式输出一个表单,以允许用户添加一个分类。不是给他们一个类别ID的文本框(或选择列表),而是给他们一个选择列表,其中 价值 是身份证,但是 文本/内部HTML 是类别名称。这样,用户只看到名称,但您的操作会得到一个传递给它的整数参数。


    更新以响应注释:

    我想你目前正在通过一个新的 Classified 对象作为视图模型,然后使用 EditorFor 帮手?很好,但你应该把 分类的 特定视图模型中的对象,例如 ClassifiedAddModel 如下:

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

    然后可以实例化并填充 分类数据模型 对象,将其作为模型传递给视图,并使用类似于

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

    在哪里? "CategoriesEditor" 是一个自定义视图模型的名称,该模型接受类别并用它们呈现选择列表。但是,上面的示例的主要目的是展示如何访问 分类的 对象以及所有现有类别。

        3
  •  0
  •   SimonGates    14 年前

    我想出了这个解决方案:

    控制器:

        var Catergories = classifiedsRepositry.GetClassifiedsCategories().AsEnumerable();
    
        ViewData["CatID"] = new SelectList(Catergories, "CatID" , "Category");
    

    观点:

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

    这就是它的死简单,它工作得很好!