数据应以何种形式传递给View?

时间:2015-07-05 13:20:07

标签: python model-view-controller wxpython

我们假设我正在追随传统的'使用wxPython的桌面应用程序(简单的CRUD应用程序)的MVC模式。

该模型利用PeeWee ORM与Postgres DB进行交互。显然,这些对象是自定义类,视图对它们一无所知。

让我们在这里定义一个Part类:

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

用户点击按钮和“编辑部分”。窗口弹出。此窗口需要显示部分详细信息。

问题是,该模型是否只是通过上述课程'视图的实例和视图只是访问实例的属性? (myPart.part_number)

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

1 个答案:

答案 0 :(得分:0)

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

假设你有一个像这样的视图模型

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
}

编辑:根据评论

如果要发布到另一个控制器,可以使用BeginForm方法的这个重载。

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