2012-06-25 1 views
1

Я просмотрел все сообщения с этой ошибкой, но никто не помогает. Я использую MVC с представлениями в ASPX (C#). Я обновляю записи в базе данных после редактирования данных в простых представлениях. Когда я обрабатываю одну запись за раз (методы EDIT EDIT и EDIT), все работает нормально. Когда я обрабатываю несколько записей (Controller UpdateTest и представление UPDATETEST), я получаю сообщение об ошибке в методе HTTPPOST в контроллере после нажатия кнопки «Отправить» в представлении.Ссылка на объект не установлена ​​в экземпляр объекта в MVC

здесь ошибка с образцом кодов одного, который работает и тот, который не делает:

Object reference not set to an instance of an object. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. 

Source Error: (CONTROLLER – SEE BELOW HttpPost UpdateTest(ICollection<Mysurvey> mysurveys) 

enter code here 

Line 48:   public ActionResult UpdateTest(ICollection<Mysurvey> mysurveys) 
Line 49:   { 
Line 50:    foreach (var survey in mysurveys) 
Line 51:    { 
Line 52:     db.Entry(survey).State = EntityState.Modified; 

Source File: C:\Users\rsc_vok\Documents\Visual Studio 2010 \Projects\MvcMysurvey\MvcMysurvey\Controllers\MysurveyController.cs Line: 50 

CONTROLLER

namespace MvcMysurvey.Controllers 
{ 
THE CODE WHICH WORKS – SINGLE EDIT 
    public ActionResult Edit(int id) 
    { 
     Mysurvey mysurvey = db.Mysurveys.Find(id); 
     return View(mysurvey); 
    } 

    // POST: /Mysurvey/Edit/5 

    [HttpPost] 
    public ActionResult Edit(Mysurvey mysurvey) 
    { 
     System.Diagnostics.Debug.WriteLine("iam in edit post"); 
     if (ModelState.IsValid) 
     { 
      db.Entry(mysurvey).State = EntityState.Modified; 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     return View(mysurvey); 
    } 

THE CODE WITH THE ERROR IN httppost – MULTIPLE RECORDS SAVE 


    public ActionResult UpdateTest(int id = 0) 
    { 

     List<Mysurvey> mysurveys = db.Mysurveys.ToList(); 

     return View(mysurveys.ToList()); 
    } 

    [HttpPost] 
    public ActionResult UpdateTest(ICollection<Mysurvey> mysurveys) 
    { 
     foreach (var survey in mysurveys) 
     { 
      db.Entry(survey).State = EntityState.Modified; 
     } 
     db.SaveChanges(); 
     return View(mysurveys); 
    } 

VIEW

UPDATETEST 
THE CODE WHICH WORKS HERE BUT THROWS AN ERROR IN CONTROLLER AFTER THE SAVE BUTTON IS HIT 

    <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcMysurvey.Models.Mysurvey>>" %> 


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

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

<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>Mysurvey</legend> 
    <% foreach (var item in Model) { %> 
    <%: Html.HiddenFor(model => item.ID) %> 
    <%: Html.HiddenFor(model => item.SurveyID) %> 
    <div class="editor-label"> 
     <%: Html.LabelFor(model => item.Comment) %> 
    </div> 
    <div class="editor-field"> 
     <%: Html.EditorFor(model => item.Comment) %> 
     <%: Html.ValidationMessageFor(model => item.Comment) %> 
    </div> 
    <%} %> 
    <p> 
     <input type="submit" value="Save" /> 
    </p> 
    </fieldset> 
<% } %> 

<div> 
<%: Html.ActionLink("Back to List", "Index") %> 
</div> 

</asp:Content> 

МОДЕЛЬ

namespace MvcMysurvey.Models 
{ 
public class Mysurvey 
{ 
    public int ID { get; set; } 

    [DisplayFormat(DataFormatString = "{0:c}")] 

    public int SurveyID { get; set; } 
    public string Comment { get; set; } 
} 
public class MysurveyDBContext : DbContext 
{ 
    public DbSet<Mysurvey> Mysurveys { get; set; } 
} 
} 
+0

Вы не указали параметры 'Html.BeginForm()'. Работает ли он без параметров? –

+0

Вы используете сильное типизированное представление? –

+0

AliRiza - Я новичок, но я считаю, что из-за MVC он автоматически возвращается к методу контроллера Overloaded [httppost], который я мог видеть, потому что ошибка возникает в этом методе. – user1456934

ответ

0

вам нужно использовать объекты коллекции, чтобы заполнить и сохранить список, чтобы обновить модель.