数据应该以什么形式传递给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" />
}
假设我在使用 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" />
}