2013-05-20 4 views
1

Я разрабатываю приложение ASP .Net MVC 3 с использованием C# и SQL Server 2005. Я использую также Entity Framework и Code First Method. У меня есть представление «Индекс», содержащее ссылку на другое представление «Обновление». Проблема, что при отладке значение представления равно NULL.Модель просмотра пропускает NULL в ASP MVC

Вид заселен контроллером, имя которого является ProfileGa.

это часть кода контроллера 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"); 
} 

Когда я поставил точку останова на линии:

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

Значение FLV является нулевым. Возможно, нет записи с указанным идентификатором в базе данных.

Я не могу углубляться в методе Найти, потому что код этого метода предопределен (я его не написал). Это метод DbSet.

Тот же код работает с другими видами, но только этим.

Я думаю, что проблема зависит от ID (ID_Gamme), который является DropDownList, не похожим на других (TextBox).

Эта часть кода индекса вида, который содержит ссылку для просмотра 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> 

и это код модели 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>();  
} 

Часть 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> 
... 
+2

ли года uput контрольной точки ON 'FlowViewModel FLV = db.FlowViewModels.Find (идентификатор),' или линии после этого, потому что, если вы поместите его в эту строку, он будет пустым, потому что эта строка еще не назначила его –

+2

Привет, Ануар, я помог по нескольким вопросам, поэтому я подумал, что FlowViewModel - это ViewModel, а не Entity в базы данных, если вы не сделали ее в таблицу в базе данных, но это не имеет большого смысла? Это таблица в базе данных? Если нет, как вы пытаетесь найти его в БД? Кроме того, поскольку Колм указывает, какое значение ПОСЛЕ этого вызова, когда значение должно быть установлено. – Belogix

+1

Имеет ли 'id' ожидаемое значение при его отладке? Если проблема заключается в том, что '.Find()' не находит ее, то похоже, что проблема не в каком-либо из кода, а в доступе к данным. Возможно, запись, которую вы ищете, не существует? Вы смотрите в правильные сущности? – David

ответ

6

проблема в том, что FlowViewModel не является сущностью я n база данных, но вместо этого ViewModel. Поэтому, когда вы пытаетесь запросить базу данных для FlowViewModel.Find..., ей нечего возвращать, поскольку она не сопоставляется с таблицей базы данных.

Возможно, вы хотите получить различную информацию из других таблиц, таких как Gamme (что вы пишете обратно). Вы должны заполнить FlowViewModel из других объектов базы данных, а затем перейти в представление.

Итак, вы хотите, чтобы заполнить от Profile_GaItems и Gammes сущностей базы данных сделать что-то вроде этого:

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

thx ,,, с этим flv уже не пуст, но есть exception: Нет элемента ViewData типа «IEnumerable », который имеет ключ «SelectedPoste». Удерживайте ,,, Я поставлю код вида Gestion в моем edit – anouar

+0

Какой тип ('Inherts =" ... "') является вашим представлением Gestion? – Belogix

+0

Это частичный вид (ascx) с использованием FlowViewModel, если он не изменился с прошлой недели. –