2013-02-13 48 views
0

我正在構建一個頁面,用戶可以通過構建一組搜索條件來查詢一組數據,就像Visual Studio TFS插件讓您搜索工作項的方式一樣:一張條件表,您可以在哪裏繼續添加行。您可以選擇「和」或「或」爲連接條件,然後選擇一個字段中輸入一個值,並選擇是否要的東西,做或不匹配它:帶有Razor viewmodels和@functions的挖空式動態頁面?

1. show items where [Field] [is|is not] [value] 
2.   [and|or] [Field] [is|is not] [value] 
3.   [and|or] [Field] [is|is not] [value] 
etc... 

現在,我期待在建立這種方式,我有一個想法。在過去,我使用了Knockout,但是這要求我在Javascript中有模型來映射數據,當我在服務器端代碼中已經在C#中使用這些模型時,這似乎是多餘的。當然,我可以使用Razor代碼對強類型視圖中的模型的一部分進行遍歷,但我找不到添加到此列表的整潔方式。

C#中的模型結構(大致)是這樣的:

  • Field
    • 字段名稱爲值
    • 爲IS布爾值選項
    • 列表/不選項。
  • Criterion
    • Field
    • 選定值
    • 組合類型(和/或)
  • Query
    • Criterion的名單(即看起來奇怪不是說標準)
    • 開始和結束日期
    • 用戶的訪問級別
    • 視野和排序選項
  • QueryViewModel
    • Query
    • 各類列出來填充視圖選項選擇區域
    • 一其他(不相關的)顯示頁面上的小元數據

在淘汰賽中,我會爲「添加搜索條件」按鈕添加一個點擊式方法,以將新條目添加到條件列表中。我可以使用剃鬚刀功能塊(@functions { ... })來獲得類似的結果嗎?我已經嘗試了一些東西,但是我發現viewmodel似乎不在範圍內,或者沒有辦法更新頁面來顯示viewmodel的新內容(儘管我正在試驗一些涉及將新更新的視圖模型傳遞給可能以某種方式工作的局部視圖)。這可以完成,還是需要深呼吸並返回到Javascript?

回答

1

您可以使用標準MVC控制器和JSONResult或使用MVC 4中的Web API序列化/反序列化C#對象爲JSON。這意味着你不必在javascript中明確地重新定義你的c#對象。

在瀏覽器中,如果需要,可以使用knockout貼圖插件將json屬性設置爲knockout observable。

這通常比從服務器動態加載和呈現html更清潔和更健壯的方法(如果這就是你的建議 - 從你的文章沒有100%清除)。