using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcApplication5.Controllers
{
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
int row;
int col;
for (row = 1; row <= 2; row++)
{
for (col = 1; col <= 2; col++)
{
Console.Write(" the answer is " + row * col);
}
}
int answer = row * col;
return View(answer);
}
}
}
我希望我的答案在乘法表中。 1 * 1 = 1,1 * 2 = 2,2 * 1 = 2,2 * 2 = 4这是我想要的。但上面的编码给了我9个答案。怎么会?我在这做错了什么?
答案 0 :(得分:1)
您可能希望IEnumerable<SomeViewModel>
作为视图模型?事实上很难说出你想要的问题,但让我试着猜测:
型号:
public MyViewModel
{
public int Col { get; set; }
public int Row { get; set; }
public int Result { get; set; }
}
控制器:
public class HomeController : Controller
{
// GET: /Home/
public ActionResult Index()
{
var model = new List<MyViewModel>();
for (int row = 1; row <= 2; row++)
for (int col = 1; col <= 2; col++)
{
model.Add(new MyViewModel
{
Row = row,
Col = col,
Result = row * col
});
}
return View(model);
}
}
查看(~/Views/Home/Index.aspx
):
<%@ Page
Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<IEnumerable<AppName.Models.MyViewModel>>"
%>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<% foreach (var item in Model) { %>
<div>
<span>Col: <%= item.Col %></span>
<span>Row: <%= item.Row %></span>
<span>Answer: <%= item.Result %></span>
</div>
<% } %>
</asp:Content>
或者,如果您使用展示广告模板(推荐):
<%@ Page
Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<IEnumerable<AppName.Models.MyViewModel>>"
%>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<%= Html.DisplayForModel() %>
</asp:Content>
然后在~/Views/Home/DisplayTemplates/MyViewModel.ascx
内:
<%@ Control
Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<AppName.Models.MyViewModel>"
%>
<div>
<span>Col: <%= Html.DisplayFor(x => x.Col) %></span>
<span>Row: <%= Html.DisplayFor(x => x.Row) %></span>
<span>Answer: <%= Html.DisplayFor(x => x.Result) %></span>
</div>
答案 1 :(得分:0)
因为它是在循环之后计算的,所以answer
当前是row
和col
的最终值相乘的结果,并忽略所有初始值和中间值。您需要构建一组要显示的结果,并在您当前拥有Console.Write(" the answer is " + row * col);
的循环中添加该组。
如果你将迭代变量放在循环中,你的问题和解决方案会更加明显,即删除独立的int row;
并将循环语句修改为for (int row = 1; row <= 2; row++)
。
答案 2 :(得分:0)
9是函数的正确返回值。我想您可能无法理解您编写的代码是如何工作的。让我带你走过它:
int row; // The variable "row" is set to the default integer value, 0
int col=2; // The variable "cols" is set to the default integer value, 0
for (row = 1; row <= 2; row++)
// set the variable row = 1.
// while the value of "row" is less than or equal to 2,
// at the end of the inner statement, increment the row variable by 1
{
for (col = 1; col <= 2; col++)
// set the variable col = 1.
// while the value of "col" is less than or equal to 2,
// at the end of the inner statement, increment the col variable by 1
{
Console.Write(" the answer is " + row * col);
}
}
那么row和col在这个语句的末尾应该等于什么呢?它们都等于3.因为你循环直到等于2,(所以在最后一次迭代中它们的值都等于2)。但是,在最后一次迭代结束时,它们都再增加1次,因此它们的值都是3。
您的返回值是row * col。使用替代。 3 * 3 = 9.你去了。
为了将表值提供给您的视图,您应该遵循Dmitri的建议作为最佳实践。如果您不明白,请让我尝试用更基本的术语来解释它。
为了让您的视图显示表格,您的视图需要接受与表格兼容的数据。无法将整数转换为表。
您想要的数据如下:
1 2
1 1 2
2 2 4
因此,您需要以最简单的形式提供一个二维整数数组,其值为:
tableArray[0] = new int[]{0,1,2};
tableArray[1] = new int[]{1,1,2};
tableArray[2] = new int[]{2,2,4};
因此,您的视图应该接受的模型类型类似于int[][]
答案 3 :(得分:0)
在每个循环中,使用行++递增行。然后检查它是否符合标准(行&lt; = 2)。如果它不符合标准,它会打破循环。但它仍然增加了。因此,当行命中2时,它会遍历循环,增加到3,然后继续。与col循环相同。所以在循环结束时,你有3 * 3即9。