[英]In what form should data be passed onto View?
假设我遵循使用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)
还是将它们转换为更简单的形式,例如列表或字典?
您正在使用Controller吗? 控制器是模型视图控制器模式的组成部分。 它们充当模型和视图之间的粘合剂。 您需要创建视图模型并将其通过控制器传递给模型。 请参见下面的示例。
假设您有一个这样的viewmodel
public class ReportViewModel
{
public string Name { set;get;}
}
在您的GET Action中,
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" />
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.