繁体   English   中英

数据应以哪种形式传递到View?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM