2015-07-05 55 views
0

我們假設我使用wxPython爲桌面應用程序(簡單的CRUD應用程序)遵循'傳統'MVC模式。數據應以何種形式傳遞給View?

該模型利用PeeWee ORM與Postgres數據庫進行交互。這些對象顯然是自定義類,並且視圖不知道它們。

讓我們在這裏定義零件類:

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

用戶點擊一個按鈕和一個「編輯零件」窗口彈出。此窗口需要顯示零件的詳細信息。

問題是,模型是否簡單地將上面的類實例傳遞給視圖,而視圖只是訪問實例的屬性? (myPart.part_number)

還是將它們轉換爲更簡單的形式,如列表或字典?

回答

0

您使用的是Controller嗎?控制器是模型 - 視圖 - 控制器模式的組成部分。它們充當模型和視圖之間的粘合劑。您需要創建視圖模型並通過控制器將其傳遞給模型。請看下面的例子。

假設你有一個像這樣

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" /> 
} 
+0

你解決了這個問題嗎?如果堆棧溢出成員提供的答案對您有用,請註冊並接受安裝程序。如果答案不正確或無用,您也可以倒計時。 – BSG

相關問題