我是.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>
非常感谢任何帮助!