ASP.NET квадратичный расчет возвращает ошибочно NaN - PullRequest
0 голосов
/ 30 октября 2010

Мое веб-приложение ASP.NET MVC должно вычислять корни полинома второй степени (квадратичного), но я ошибочно получаю Nan ответов. Я считаю, что это связано с моей неправильной настройкой, поэтому позвольте мне опубликовать часть моего кода здесь:

Вид:

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

Контроллер (обрабатывает все управление запросами на вычисления, как квадратичные):

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

Модель (выполнение расчета):

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

Итак, скажем, в представлении конечный пользователь вводит a=1, b=0 и c=0, мое приложение выведет Nan для Root1 и Root2. Я думаю, что это может быть связано с тем, что я неправильно подключил свой ввод конечного пользователя к переменным экземпляра моего объекта newQuadCalc ...

1 Ответ

2 голосов
/ 30 октября 2010

Ваш код не выполняется, поскольку значения, введенные на веб-сайте, не передаются в логику расчета. Это происходит из-за сбоя привязки модели из-за несоответствия между именами текстовых полей и именами свойств вашей модели. Вместо этого ваш взгляд должен выглядеть примерно так:

<% 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>
<% } %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...