2010-10-29 10 views
2

J'ai vu un similar question ici sur SO mais je crois que le mien diffère un peu.ASP.NET MVC Référence d'objet non définie sur une instance d'un objet

OK, donc j'ai une simple vue ici:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<RootFinder.Models.QuadCalc>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
Polynomial Root Finder - Quadratic 
</asp:Content> 

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

    <%= Html.BeginForm("Quadratic", "Calculate") %> 
    <% { %> 
    <div> 
     a: <%= Html.TextBox("quadAValue", Model.quadraticAValue) %> 
     <br /> 
     b: <%= Html.TextBox("quadBValue", Model.quadraticBValue) %> 
     <br /> 
     c: <%= Html.TextBox("quadCValue", Model.quadraticCValue) %> 
     <br /> 
     <input type="submit" id="quadraticSubmitButton" value="Calculate!" /> 
     <br /> 
     <p><%= Model.x1 %></p> 
     <p><%= Model.x2 %></p> 
    </div> 
    <% } %> 
</asp:Content> 

Et mon contrôleur ici:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using RootFinder.Models; 

namespace RootFinder.Controllers 
{ 
    public class CalculateController : Controller 
    { 
     // 
     // GET: /Calculate/ 

     public ActionResult Index() 
     { 
      return View(); 
     } 

     [AcceptVerbs(HttpVerbs.Get)] 
     public ViewResult Quadratic() 
     { 
      return View(); 
     } 

     [AcceptVerbs(HttpVerbs.Post)] 
     public ViewResult Quadratic(QuadCalc newQuadCalc) 
     { 
      return View(newQuadCalc); 
     } 

     public ActionResult Cubic() 
     { 
      return View(); 
     } 

     public ActionResult Quartic() 
     { 
      return View(); 
     } 
    } 
} 

Maintenant, lors du chargement de ma version Get de la vue Quadratic, je reçois le message suivant de VS2010:

Object reference not set to an instance of an object

Maintenant, je comprends un peu le message en lui-même, mais n'est-ce pas une mauvaise chose de créer un nouvel objet d'une classe dans la vue elle-même? Ce qui est la raison pour laquelle je tente de gérer cela dans le contrôleur pour le Post seulement .....

Hmm ...

Répondre

1

Comme vous le faites dans votre action Post, mais dans le Get vous passez une nouvelle nouveau modèle QuadCalc initialisé à la vue

[AcceptVerbs(HttpVerbs.Get)] 
public ViewResult Quadratic() { 
    return View(new QuadCalc()); 
} 
+0

Hey, merci encore! :) Maintenant, est-ce que la syntaxe que vous avez fournie produit les mêmes résultats que la syntaxe que j'ai fournie dans mon article, juste une question de préférence? Ou signifient-ils des choses différentes? – Qcom

+1

Je ne suis pas sûr de comprendre ce que vous entendez par sintax :) Voulez-vous dire le format? Je viens de copier votre code et de le mettre en forme comme je le souhaite. Si ce n'était pas votre sens s'il vous plaît laissez-moi le comprendre mieux. Merci! – Lorenzo

+0

OK, c'est ce que je veux dire. Je fais juste référence au fait que vous avez placé des parenthèses '()' dans la 'return view()'. Le mien a renvoyé l'objet. Mais, c'est légèrement différent de la poste, comme vous l'avez dit, correct? – Qcom