EF4生成的CRUD视图因创建父 - 子表关系而出现问题

时间:2012-05-31 01:21:18

标签: asp.net-mvc-3 sql-server-2008 entity-framework parent-child crud

我是.NET的新手,我正在建立一个使用MVC3,EF4,SQL 2008 R2的网站。此外,我还没有在Stack上找到任何直接解决我的问题的内容,这涉及EF生成的父子表关系复杂问题。

我们的网站有用户个人资料(表格:个人资料),每个人都可以在社交表上有几个记录,这意味着社交表的FK为ProfileId。

EF4为此社交表生成了CRUD视图和控制器,除了Create之外,所有这些都很有效。 “创建”视图会自动生成一个下拉框,以允许用户选择他们想要的ProfileId,但这是错误的。 (即,我们不希望有人为其他用户设置社交信息,呃。)所以我将下拉菜单转换为@ Html.HiddenFor(model => model.ProfileId),此时我的问题就开始了

当我点击该视图上的CREATE按钮时,没有任何反应。这似乎很可能是因为页面在上下文中没有用户的ProfileId,我想知道要改变什么来克服这个障碍。 (用户的ProfileId在上一页的上下文中是Index.cshtml,因为我将社交记录列表限制为与其Id匹配的记录。)

模型中的一些代码:

using System;
using System.Collections.Generic;

public partial class Social
{
    public int SocialId { get; set; }
    public int ProfileId { get; set; }
    public Nullable<int> ThemeId { get; set; }
    public string Title { get; set; }
    public Nullable<System.DateTime> CreateDate { get; set; }
    public Nullable<System.DateTime> LastActivityDate { get; set; }
    public Nullable<bool> Active { get; set; }
    public Nullable<bool> Publish { get; set; }

    public virtual Profile Profile { get; set; }
    public virtual Theme Theme { get; set; }
}

控制器代码:

    public ActionResult Create()
    {
        ViewBag.ProfileId = new SelectList(db.Profiles, "ProfileId", "Profile");
        ViewBag.ThemeId = new SelectList(db.Themes, "ThemeId", "ThemeTitle");
        return View();
    } 

    [HttpPost]
    public ActionResult Create(Social social)
    {
        if (ModelState.IsValid)
        {
            db.Socials.Add(social);
            db.SaveChanges();
            return RedirectToAction("Index");  
        }

        ViewBag.ProfileId = new SelectList(db.Profiles, "ProfileId", "Profile", social.ProfileId);
        ViewBag.ThemeId = new SelectList(db.Themes, "ThemeId", "ThemeTitle", social.ThemeId);
        return View(social);
    }

......并且从视图:

    <div class="editor-label">
        @Html.LabelFor(model => model.ProfileId, "Profile")
    </div>
    <div class="editor-field">
        @Html.DropDownList("ProfileId", String.Empty)
        @Html.ValidationMessageFor(model => model.ProfileId)
    </div>

非常感谢任何帮助!

0 个答案:

没有答案