我们假设我正在追随传统的'使用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)
或者它是否将它们转换为更简单的形式,如列表或字典?
答案 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" />
}