数据应该以什么形式传递给View?

In what form should data be passed onto View?

假设我在使用 wxPython 的桌面应用程序(一个简单的 CRUD 应用程序)中遵循 'traditional' MVC 模式。

该模型利用 PeeWee ORM 与 Postgres 数据库进行交互。显然,这些对象是自定义的 classes 并且视图不知道它们。

让我们在这里定义一个部分class:

class Part(BaseModel):
part_number = pw.CharField()
kind = pw.CharField()
description = pw.CharField()
unit = pw.CharField(db_column = 'unit')

用户点击一个按钮,弹出一个'Edit Part'window。这window需要显示零件的详细信息。

问题是,模型是否只是将上述 class' 实例传递给视图,而视图只是访问实例的属性? (myPart.part_number)

还是将它们转换为更简单的形式,如列表或字典?

您在使用控制器吗?。控制器是模型-视图-控制器模式的组成部分。它们充当模型和视图之间的粘合剂。您需要创建视图模型并将其通过控制器传递给模型。请看下面的例子。

假设您有这样的视图模型

public class ReportViewModel
{
   public string Name { set;get;}
}

并在您的 GET 操作中,

public ActionResult Report()
{
  return View(new ReportViewModel());
}

并且您的视图必须强类型化为 ReportViewModel

@model ReportViewModel
@using(Html.BeginForm())
{
  Report NAme : @Html.TextBoxFor(s=>s.Name)
  <input type="submit" value="Generate report" />
}

并在控制器中的 HttpPost 操作方法中

[HttpPost]
public ActionResult Report(ReportViewModel model)
{
  //check for model.Name property value now
  //to do : Return something
}

或者简单地说,您可以在没有 POCO 类 (Viewmodels)

的情况下执行此操作
@using(Html.BeginForm())
{
   <input type="text" name="reportName" />
   <input type="submit" />
}

并在您的 HttpPost 操作中,使用与文本框名称同名的参数。

[HttpPost]
public ActionResult Report(string reportName)
{
  //check for reportName parameter value now
  //to do : Return something
}

编辑:根据评论

如果您想 post 到另一个控制器,您可以使用 BeginForm 方法的重载。

@using(Html.BeginForm("Report","SomeOtherControllerName"))
{
   <input type="text" name="reportName" />
   <input type="submit" />
}