我需要乘法表输出?怎么了?

时间:2011-03-10 19:27:41

标签: asp.net-mvc-2

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个答案。怎么会?我在这做错了什么?

4 个答案:

答案 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当前是rowcol的最终值相乘的结果,并忽略所有初始值和中间值。您需要构建一组要显示的结果,并在您当前拥有Console.Write(" the answer is " + row * col);的循环中添加该组。

如果你将迭代变量放在循环中,你的问题和解决方案会更加明显,即删除独立的int row;并将循环语句修改为for (int row = 1; row <= 2; row++)

答案 2 :(得分:0)

  1. 您的返回值是一个整数。我不知道你希望得到一张桌子。
  2. 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);         
    
       }
    

    }

  3. 那么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。