0

我正在使用 C# 和 SQL Server 2005 开发一个 ASP .Net MVC 3 应用程序。

我也在使用实体框架和代码优先方法。

我有一个视图索引,其中包含一些指向其他视图的链接。

在这些视图中,有我创建的“Update.aspx”(不是由实体框架自动生成的)。

它的目的是在我的基础中编辑表“Gamme”中的一些值。

问题是:当我单击此视图的链接(更新)时,出现此错误:

你调用的对象是空的。

这是视图索引的一部分代码,其中包含视图 Upadate 的链接:

<%@ 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">


<fieldset>
<legend>Gestion des Gammes</legend>
<table>
    <tr>
        <th>
            ID Gamme
        </th>
        <th>
            ID Poste
        </th>
        <th>
           Nombre de Passage
        </th>
        <th>
            Position
        </th>
        <th>
            Poste Précédent
        </th>
         <th>
            Poste Suivant
        </th>
        <th>Opérations</th>
    </tr>

<% 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>
 </fieldset>     
</asp:Content>

这是控制器 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 的代码:

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>();

    }

最后是视图“更新”的代码:

asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Update
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>Modifier une gamme</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>Gamme</legend>
        <div><%:Html.Label("Gamme :")%><%: Html.DropDownListFor(model => model.SelectedProfile_Ga, new SelectList(Model.Profile_GaItems, "ID_Gamme", "ID_Gamme"))%></div>

         <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>
        <p>
            <input type="submit" value="Enregistrer" />
        </p>
    </fieldset>
<% } %>

<div>
    <%: Html.ActionLink("Reour à la liste", "Index") %>
</div>  
4

1 回答 1

3

在控制器中的以下代码行中,您似乎正在从某个地方获取模型:

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

确保(通过在此处放置断点)您在更新视图中使用的所有属性都在此处正确初始化。此异常的可能原因是flv为 null 或正在使用它的某些属性。

通常当您在运行时收到 NullReferenceException 时,YSOD 指向您的视图的确切位置,您会在其中收到此异常。这将提示您需要填充哪个属性。

于 2013-05-20T12:11:20.283 回答