所以我刚刚尝试使用ASP.NET MVC,我真的开始喜欢一切都有一个目的(就模型,视图和控制器之间的目的分离而言)但我是仍然在将我的基本知识用于某种实际目的时遇到一些麻烦。
所以,我正在考虑尝试创建我的原始JavaScript多项式根查找器的ASP.NET MVC版本。它应该相对简单。显然它并不能解决每一个学位的所有根源(至少在目前),但我至少试图得到Quadratic-Quartic。
所以,除了HomeController
之外,我还有1个控制器。这称为CalculateController
,它将处理与处理特定类型多项式根的计算相关的所有控制。
因此,我有3个视图,每个不同类型的多项式为1,Quadratic.aspx
,Cubic.aspx
和Quartic.aspx
。
现在,我想在这种情况下我需要一个模型来处理我的“业务逻辑”,即根的实际计算和代数计算。
这是我需要一些反馈的地方。
我应该创建一个Calculate类吗?这就是我现在所拥有的。在类中,我声明了5个不同的实例字符串变量(我认为这是正确的术语):
public int aValue;
public int bValue;
public int cValue;
public int dValue;
public int eValue;
这些将存储每个术语的值。现在,考虑到Quadratic和Cubic不会使用所有这些实例字段,这是一个坏主意吗?如果是这样,那么我可以为每个单独的多项式类型创建单独的类。
好的,现在,我还必须从表单中接收一些输入,以便将输入的值分配给这些变量。
我对如何做到这一点感到有点难过。
我的二次视图中有一个表单:
<% using(Html.BeginForm("QuadraticForm", "Calculate")) %>
<% { %>
a: <%= Html.TextBox("quadraticAValue") %>
<br />
b: <%= Html.TextBox("quadraticAValue") %>
<br />
c: <%= Html.TextBox("quadraticAValue") %>
<br />
<input type="submit" id="quadraticSubmitButton" />
<% } %>
非常简单,非常基本。
现在,如何通过Calculat
方法将这些输入的整数分配到Quadratic()
e类的新对象中?
更新
好的,由于一些研究,我比以前有更多的知识,所以我将完整地保留上面的原始问题,并在下面用我发现的一些信息进行更新:
对于每种不同类型的多项式,我将在Models文件夹中有一个单独的类。目前,我正在试验QuadCalc.cs
文件,即二次多项式的模型。
这是我到目前为止的代码:
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 void QuadCalculate(double quadraticdAValue, double quadraticBValue, double quadraticCValue, out double x1, out double x2)
{
//Quadratic Formula: x = (-b +- sqrt(b^2 - 4ac)) / 2a
//Calculate the inside of the square root
double insideSquareRoot = (quadraticBValue * quadraticBValue) - 4 * quadraticdAValue * quadraticCValue;
if (insideSquareRoot < 0)
{
//There is no solution
x1 = double.NaN;
x2 = double.NaN;
}
else
{
//Compute the value of each x
//if there is only one solution, both x's will be the same
double sqrt = Math.Sqrt(insideSquareRoot);
x1 = (-quadraticBValue + sqrt) / (2 * quadraticdAValue);
x2 = (-quadraticBValue - sqrt) / (2 * quadraticAValue);
}
}
}
}
在上面的代码中,我得到并设置了表单的值(不确定整个string
到double
的事情是如何解决的,但我们可以担心以后的xD)然后将它们用作围绕这个着名的二次“公式”构建的方法的参数。
现在,在我的Calculate
控制器中,这是我的代码,适用于Quadratics:
[AcceptVerbs(HttpVerbs.Get)]
public ViewResult Quadratic()
{
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ViewResult Cubic(QuadCalc boss)
{
return View();
}
现在,在上面的代码中,我应该放置boss
而不是{{1}}?我不能把它省略但我相信它应该是一个对象的名称?问题是,我从未在模型中指定过对象,我应该这样做吗?
答案 0 :(得分:2)
我对你的术语感到有点困惑。也许这是一个错误?您没有在模型中指定对象。 Model是一个类,View的对象实例将被使用。 MVC模型绑定将在后台工作,以将您的输入值映射到您指定的类,作为此View的相应Controller方法的参数。
我创建了一个示例ASP.NET MVC 2项目,只是为了将其中的一部分哈希并获得可构建的示例代码。我将项目命名为PolynomialRootFinder
。我在Models文件夹中创建了一个QuadCalc.cs类文件,在Views文件夹中创建了一个Calculate子文件夹,里面有一个QuadCalcIndex.aspx视图页面(我知道页面命名很麻烦。你可能想要创建更多的子文件夹或使用一些其他惯例,但这只是一个快速而肮脏的。)。
快速更改QuadCalc.cs代码:我会将QuadCalculate
的签名更改为:
public void QuadCalculate(out double x1, out double x2)
无需传入已经指定为类的属性的参数,因此我取出了quadraticXValue参数。实际上我会更进一步,让x1和x2成为班级的属性,但那只是我。
接下来的内容取决于你如何实现它,但我将假设一个特定的实现并从那里开始。假设QuadCalcIndex.aspx是输入形式,QuadCalcResult.aspx显示计算结果。你的CalculateController.cs代码看起来像这样:
public ActionResult QuadCalcIndex()
{
return View();
}
public ActionResult QuadCalcResult(QuadCalc quadCalc)
{
double x1;
double x2;
quadCalc.QuadCalculate(out x1, out x2);
ViewData["x1"] = x1;
ViewData["x2"] = x2;
return View();
}
请注意,内置模型绑定器足够智能,可以将quadraticXValue输入映射到quadCalc对象中相同名称的相应属性,这就是您不必手动将这些值分配给对象的原因。
QuadCalcResult.aspx的内容看起来像这样:
x1: <%= ViewData["x1"] %><br />
x2: <%= ViewData["x2"] %>
修改文件/ class / property / method / variable / etc.品尝名称。我通常喜欢返回一个ViewModel类,使用强类型视图显示x1和x2之类的值,但ViewData方法有效并且适用于快速示例。
答案 1 :(得分:1)
我通常会将我发布的模型称为已发布模型。