c# - 从经典的 asp 过渡到 asp.net MVC

标签 c# asp.net asp.net-mvc asp.net-mvc-4 asp-classic

我习惯在经典中使用嵌套循环。来自第一个记录集的数据被传递到第二个记录集。我将如何在 MVC 中完成同样的事情?据我所知,我只能将一个模型传递给我的 View 。

  <% 
  rs.open "{Call usp_SalesOrder}",oConn
  Do While (NOT rs.EOF)
  %>
    <div><% = rs("SalesOrderNumber")%></div>

    <% 
    rs2.open "{Call usp_SalesOrderLines(" & rs("SOKey") & ")}",oConn
    Do While (NOT rs.EOF)
    %>

      <div><% = rs2("SalesOrderLineNumber")%></div>

    <% 
    rs2.MoveNext
    Loop
    rs2.close
    %>        
  <% 
  rs.MoveNext
  Loop
  rs.close
  %>

最佳答案

我的建议是建立一个更稳健的模型。的确,您只能将一个模型传递给您的 View ,但您的模型可以包含多个数据集的结果,前提是您已在 Controller 中收集这些数据集并将它们分配给模型。

我还建议远离 ViewBag。这是一个容易掉入的陷阱。相信我,您以后会后悔的。

对于您的示例,可能是这样定义的模型:

public class MyModel
{
    public List<SalesOrder> SalesOrders = new List<SalesOrder>();
}

public class SalesOrder
{
    public string SOKey = string.Empty;
    public List<SalesOrderLine> SalesOrderLines = new List<SalesOrderLine>();
}

以及在 Controller 中填充销售订单的代码:

public Action Index()
{
    MyModel model = new MyModel();
    model.SalesOrders.AddRange(CallUspSalesOrder());
    foreach (SalesOrder salesOrder in model.SalesOrders)
    {
        salesOrder.SalesOrderLines.AddRange(CallUspSalesOrderLines(salesOrder.SOKey));
    }

    return View(model);
}

这样,您就可以访问 View 中的所有销售订单(及其销售订单行)。

关于c# - 从经典的 asp 过渡到 asp.net MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22210127/

相关文章:

c# - MVC 图表仅显示文本流

c# - 如何在 C# MVC Web 应用程序中进行定期事件?

c# - cargo 崇拜编程 : locking on System. 对象

c# - 关于如何使用类似插件的体系结构实现 c# 主机应用程序的问题

c# - 从 asp.net 读取配置文件

asp.net - httpcontext.current.cache 中的对象列表

javascript - 如何在客户端设置自定义验证器 isValid 属性?

c# - ValidationMessageFor 的使用

c# - ASP.NET Core 2 SignalR Hub 接收复杂对象而不是字符串

C#运行参数中有多个空格的进程