Pergunta

Meu ASP.NET MVC web application é suposto para calcular as raízes de um polinómio de segundo grau (quadrática), mas estou erroneamente ficar Nan respostas.Eu acredito que isso é devido a minha configuração incorrecta, então deixe-me postar um pouco do meu código aqui:

Visão:

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

    <% using(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 />
        <br />
        <strong>Root 1:</strong>
        <p><%= Model.x1 %></p>
        <br />
        <strong>Root 2:</strong>
        <p><%= Model.x2 %></p>
    </div>
    <% } %>
</asp:Content>

(Controlador processa todo o controle de solicitações de cálculos, como o quadrática):

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

        [HttpGet]
        public ViewResult Quadratic()
        {
            return View(new QuadCalc());
        }

        [HttpPost]
        public ViewResult Quadratic(QuadCalc newQuadCalc)
        {
            newQuadCalc.QuadCalculate();
            return View(newQuadCalc);
        }

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

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

(Modelo de realização de cálculo):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace RootFinder.Models
{
    public class QuadCalc
    {
        public double quadraticAValue { get; set; }
        public double quadraticBValue { get; set; }
        public double quadraticCValue { get; set; }
        public double x1 { get; set; }
        public double x2 { get; set; }

        public void QuadCalculate()
        {
            //Quadratic Formula: x = (-b +- sqrt(b^2 - 4ac)) / 2a

            //Calculate discriminant
            double insideSquareRoot = (quadraticBValue * quadraticBValue) - 4 * quadraticAValue * quadraticCValue;

            if (insideSquareRoot < 0)
            {
                //No real solution
                x1 = double.NaN;
                x2 = double.NaN;
            }
            else if (insideSquareRoot == 0)
            {
                //One Solution
                double sqrtOneSolution = Math.Sqrt(insideSquareRoot);
                x1 = (-quadraticBValue + sqrtOneSolution) / (2 * quadraticAValue);
                x2 = double.NaN;
            }
            else if (insideSquareRoot > 0)
            {
                //Two Solutions
                double sqrtTwoSolutions = Math.Sqrt(insideSquareRoot);
                x1 = (-quadraticBValue + sqrtTwoSolutions) / (2 * quadraticAValue);
                x2 = (-quadraticBValue - sqrtTwoSolutions) / (2 * quadraticAValue);
            }
        }
    }
}

Então, vamos dizer que o Visualizar, o usuário final que entra a=1, b=0 e c=0, o meu pedido de visto de saída Nan para tanto Root1 e Root2.Eu acho que isso pode ser devido ao fato de que eu não tenha conectado corretamente meu entrada do usuário final para as variáveis de instância da minha newQuadCalc objeto...

Foi útil?

Solução

Seu código está falhando porque os valores que são inseridos no site não são propagados para o cálculo de lógica.Isso está acontecendo porque a associação de modelo está a falhar devido a uma incompatibilidade entre o texto nomes e os nomes de seu modelo, propriedades.A sua visão deve ser algo como isto:

<% using (Html.BeginForm("Quadratic", "Calculate")) %>
<% { %>
<div>
    a: <%= Html.TextBoxFor(m=> m.quadraticAValue) %>
    <br />
    b: <%= Html.TextBoxFor(m => m.quadraticBValue) %>
    <br />
    c: <%= Html.TextBoxFor(m => m.quadraticCValue)%>
    <br />
    <input type="submit" id="quadraticSubmitButton" value="Calculate!" />
    <br />
    <strong>Root 1:</strong>
    <p><%= Html.DisplayFor(m => m.x1) %></p>
    <br />
    <strong>Root 2:</strong>
    <p><%= Html.DisplayFor(m => m.x2)%></p>
</div>
<% } %>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top