ASP.NET quadrática cálculo retornando NaN erroneamente
-
27-09-2019 - |
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...
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>
<% } %>