我对 .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>
任何帮助将不胜感激!