2013-05-05 56 views
1

我正在開發一個使用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。

回答

0

您的Poste班擁有Poste's的ICollection。我不是100%確定,但這聽起來像是對我的循環引用(你有一個類是它自己的集合)

你也有一個虛擬的Lignes和一個IEnumerable的Lignes。我認爲你沒有正確使用前面提到的兩個項目中的任何一個。

+0

感謝您的回答,我用與表用戶和表帳戶相同的方法。它的工作原理是完美的,這裏的問題我認爲,Table Ligne在另一個表格(UF)中也有一個外鍵,而USER和Account不是這種情況 – anouar 2013-05-06 14:56:09