Das View Model übergibt NULL in ASP MVC

Ich entwickle eine ASP .Net MVC 3 Anwendung mit C # und SQL server 2005. Ich verwende auch Entity Framework und Code First Method. Ich habe eine view 'Index', die einen Link zu einer anderen view 'Update' enthält. Das Problem, dass beim Debuggen der Wert der view NULL ist.

Die view wird von einem Controller belegt, den der Name ProfileGa ist.

Dies ist ein Teil des Code des Controllers ProfileGa:

public ActionResult Update(string id) { FlowViewModel flv = db.FlowViewModels.Find(id); return View(flv); } [HttpPost] public ActionResult Update(FlowViewModel model) { Console.WriteLine("" + model.Nbr_Passage); Gamme G = new Gamme(); ListG.Remove(G); db.Gammes.Remove(G); G.ID_Gamme = model.SelectedProfile_Ga; G.ID_Poste = model.SelectedPoste; G.Last_Posts = model.PostePrecedentSelected; G.Next_Posts = model.PosteSuivantSelected; G.Nbr_Passage = int.Parse(model.Nbr_Passage); G.Position = int.Parse(model.Position); ListG.Add(G); db.Gammes.Add(G); db.SaveChanges(); return RedirectToAction("Index"); } 

Wenn ich einen Haltepunkt auf die Linie setze:

 FlowViewModel flv = db.FlowViewModels.Find(id); 

Der Wert von flv ist NULL. Vielleicht gibt es keinen datasatz mit der angegebenen ID in der database.

Ich kann nicht tief auf die Methode gehen, weil der Code dieser Methode vordefiniert ist (ich habe es nicht geschrieben). Es ist eine Methode von DbSet.

Der gleiche Code funktioniert mit anderen viewen, aber nur das.

Ich denke, das Problem hängt von der ID (ID_Gamme), die eine DropDownList nicht wie die anderen (TextBox) ist.

Dies ist ein Teil des Codes der view Index, der den Link für die view enthält Update:

 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.master" Inherits="System.Web.Mvc.ViewPage<MvcApplication2.Models.FlowViewModel>" %> <%@ Import Namespace="Helpers" %> <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> Index </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <table> <% foreach (var item in Model.GaItems) { %> <tr> <td> <%: Html.DisplayFor(modelItem => item.ID_Gamme) %> </td> <td> <%: Html.DisplayFor(modelItem => item.ID_Poste) %> </td> <td> <%: Html.DisplayFor(modelItem => item.Nbr_Passage) %> </td> <td> <%: Html.DisplayFor(modelItem => item.Position) %> </td> <td> <%: Html.DisplayFor(modelItem => item.Last_Posts) %> </td> <td> <%: Html.DisplayFor(modelItem => item.Next_Posts) %> </td> <td> <%: Html.ActionLink("Modifier", "Update", new { id=item.ID_Gamme }) %> </td> </tr> <% } %> </table> </asp:Content> 

und das ist der Code des models FlowViewModel:

 public class FlowViewModel { [Key] public string IDv { get; set; } [NotMapped] public SelectList PostesItems { get; set; } public List<Profile_Ga> Profile_GaItems { get; set; } public List<Gamme> GaItems { get; set; } public string SelectedProfile_Ga { get; set; } public string SelectedPoste { get; set; } public string PostePrecedentSelected { get; set; } public string PosteSuivantSelected { get; set; } public string Position { get; set; } public string Nbr_Passage { get; set; } public List<Gamme> ListG = new List<Gamme>(); } 

Ein Teil von Gestion.ascx:

 <% using (Html.BeginForm("Save", "Anouar")) { %> <%: Html.ValidationSummary(true) %> <fieldset class="parametrage"> <legend>Gestion de Gamme</legend> <div><%:Html.Label("Poste :")%><%: Html.DropDownListFor(model => model.SelectedPoste, Model.PostesItems)%></div> <div><%:Html.Label("Nombre de Passage :")%><%: Html.EditorFor(model=>model.Nbr_Passage)%></div><div class="editor-field"> <%: Html.ValidationMessageFor(model => model.Nbr_Passage)%></div> <div><%:Html.Label("Position :")%><%: Html.EditorFor(model=>model.Position)%></div> <div><%:Html.Label("Poste Précédent :")%><%: Html.DropDownListFor(model => model.PostePrecedentSelected, Model.PostesItems)%></div> <div><%:Html.Label("Poste Suivant :")%><%: Html.DropDownListFor(model => model.PosteSuivantSelected, Model.PostesItems)%></div> <div><input type="submit" value="Enregistrer" id="btnSave" /></div> </fieldset> ... 

Solutions Collecting From Web of "Das View Model übergibt NULL in ASP MVC"

Das Problem ist, weil FlowViewModel keine Entität in der database ist, sondern ein ViewModel . Deshalb, wenn Sie versuchen, die database für FlowViewModel.Find... es hat nichts zurückzugeben, da es nicht zu einer databasetabelle abbilden kann.

Sie werden wahrscheinlich wollen, um verschiedene Informationen aus den anderen Tabellen wie Gamme (die Sie schreiben zurück zu). Sie sollten das FlowViewModel aus den anderen databaseentitäten FlowViewModel und dann in die view übergehen.

Also, du willst von Profile_GaItems und Gammes database-Entitäten zu Profile_GaItems , macht so etwas wie:

 public ActionResult Update(string id) { FlowViewModel flv = new FlowViewModel(); flv.Profile_GaItems = db.Profile_GaItems.ToList(); flv.GaItems = db.Gammes.ToList(); return View(flv); }