我正在開發一個使用C#和SQL Server 2005的ASP .Net MVC 3應用程序。
我也在使用實體框架和代碼優先方法。
我有一個模型'Poste',其中包含一些屬性。
當我創建控制器時,Poste的視圖(創建,編輯,刪除...)會自動創建。
我在這個模型中有一個外鍵。
這個外鍵的值顯示在'DropDownList'中。
問題是這些值與我的外鍵的右表沒有關係。
的人進一步解釋:
我有3個表分別是:ASP中DropDownList的無關值MVC
- 郵政(ID_Poste,Nom_Poste,...,#ID_Ligne)
- 利涅(ID_Ligne,#ID_UF)
- UF(ID_UF)
在我的表單中,DropDownList通常用於顯示ID_Ligne(表中的外鍵),但事實上,所顯示的值爲表UF(精確ID_UF)。
所以,它是表UF的投影。
我不知道原因。
我很抱歉英文,,,它不夠清楚,我會盡力解釋更多。
這裏是郵政的模型:
namespace MvcApplication2.Models
{
public class Poste
{
[Required]
[Key]
[Display(Name = "ID Poste :")]
public string ID_Poste { get; set; }
[Required]
[Display(Name = "Nom Poste:")]
public string nom_Poste { get; set; }
[Required]
[Display(Name = "Application :")]
public string Application { get; set; }
[Required]
[Display(Name = "In Poste :")]
public string In_Po { get; set; }
[Required]
[Display(Name = "Out Poste :")]
public string Out_Po { get; set; }
[Required]
[Display(Name = "Etat :")]
public string Etat { get; set; }
[Required]
[ForeignKey("Ligne")]
[Display(Name = "ID Ligne :")]
public string ID_Ligne { get; set; }
[Required]
[Display(Name = "Mouvement :")]
public string Mouvement { get; set; }
public virtual Ligne Ligne { get; set; }
public IEnumerable<Ligne> Lignes { get; set; }
public virtual ICollection<Poste> Postes { get; set; }
}
}
}
而這個控制器:
namespace MvcApplication2.Controllers
{
public class PosteController : Controller
{
private GammeContext db = new GammeContext();
//
// GET: /Poste/
public ViewResult Index()
{
var postes = db.Postes.Include(p => p.Ligne);
return View(postes.ToList());
}
//
// GET: /Poste/Details/5
public ViewResult Details(string id)
{
Poste poste = db.Postes.Find(id);
return View(poste);
}
//
// GET: /Poste/Create
public ActionResult Create()
{
ViewBag.ID_Ligne = new SelectList(db.Lignes, "ID_Ligne", "ID_UF");
return View();
}
//
// POST: /Poste/Create
[HttpPost]
public ActionResult Create(Poste poste)
{
if (ModelState.IsValid)
{
db.Postes.Add(poste);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ID_Ligne = new SelectList(db.Lignes, "ID_Ligne", "ID_UF", poste.ID_Ligne);
return View(poste);
}
//
// GET: /Poste/Edit/5
public ActionResult Edit(string id)
{
Poste poste = db.Postes.Find(id);
ViewBag.ID_Ligne = new SelectList(db.Lignes, "ID_Ligne", "ID_UF", poste.ID_Ligne);
return View(poste);
}
//
// POST: /Poste/Edit/5
[HttpPost]
public ActionResult Edit(Poste poste)
{
if (ModelState.IsValid)
{
db.Entry(poste).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ID_Ligne = new SelectList(db.Lignes, "ID_Ligne", "ID_UF", poste.ID_Ligne);
return View(poste);
}
//
// GET: /Poste/Delete/5
public ActionResult Delete(string id)
{
Poste poste = db.Postes.Find(id);
return View(poste);
}
//
// POST: /Poste/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(string id)
{
Poste poste = db.Postes.Find(id);
db.Postes.Remove(poste);
db.SaveChanges();
return RedirectToAction("Index");
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
}
,創造finaly查看:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.master" Inherits="System.Web.Mvc.ViewPage<MvcApplication2.Models.Poste>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Create
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Ajouter</h2>
<script src="<%: Url.Content("~/Scripts/jquery.validate.min.js") %>" type="text/javascript"></script>
<script src="<%: Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js") %>" type="text/javascript"></script>
<% using (Html.BeginForm()) { %>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>Poste</legend>
<div class="editor-label">
<%: Html.LabelFor(model => model.ID_Poste) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.ID_Poste) %>
<%: Html.ValidationMessageFor(model => model.ID_Poste) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.nom_Poste) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.nom_Poste) %>
<%: Html.ValidationMessageFor(model => model.nom_Poste) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Application) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.Application) %>
<%: Html.ValidationMessageFor(model => model.Application) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.In_Po) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.In_Po) %>
<%: Html.ValidationMessageFor(model => model.In_Po) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Out_Po) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.Out_Po) %>
<%: Html.ValidationMessageFor(model => model.Out_Po) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Etat) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.Etat) %>
<%: Html.ValidationMessageFor(model => model.Etat) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.ID_Ligne, "Ligne") %>
</div>
<div class="editor-field">
<%: Html.DropDownList("ID_Ligne", String.Empty) %>
<%: Html.ValidationMessageFor(model => model.ID_Ligne) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Mouvement) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.Mouvement) %>
<%: Html.ValidationMessageFor(model => model.Mouvement) %>
</div>
<p>
<input type="submit" value="Ajouter" />
<input type="reset" value="Vider" />
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Retour à la liste", "Index") %>
</div>
</asp:Content>
PS:執行後,新列(Poste_ID_Poste)被創建爲 automaticaly在我的基地在2表:Poste和Ligne。
感謝您的回答,我用與表用戶和表帳戶相同的方法。它的工作原理是完美的,這裏的問題我認爲,Table Ligne在另一個表格(UF)中也有一個外鍵,而USER和Account不是這種情況 – anouar 2013-05-06 14:56:09