1

我对 .NET 比较陌生,并且正在使用 MVC3、EF4、SQL 2008 R2 构建一个网站。此外,我还没有在 Stack 上找到任何可以直接解决我的问题的内容,这涉及到 EF 生成的问题以及父子表关系的复杂性。

我们的站点有用户资料(表:Profile),每个人在Social表上可以有几条记录,也就是说Social表有一个ProfileId的FK。

EF4 已经为这个 Social 表生成了 CRUD 视图和控制器,除了 Create 之外,一切都很好。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>

任何帮助将不胜感激!

4

0 回答 0