2012-08-30 90 views
1

我是mvc3和剃鬚刀的新手,和C#的母親,一個小公司剛剛給了我一個合同,做一個失敗的一個龐大的項目基地......現在我需要根據用戶保存的選項創建一張圖書表...書籍目前在模型中有大約40種不同的信息,我想知道如何在模板編輯器或其他任何方式下正確設置它...MVC3剃刀編輯器模板和其他參數

現在它看起來像在視圖中:

<table> 
     <tr class="header"> 
     @if (!((List<string>)Session["searchPreferences"]).Contains("Authors")) 
     { 
       <td>Author</td> 
     } 
     @if (!((List<string>)Session["searchPreferences"]).Contains("bookName")) 
     { 
       <td>bookName</td> 
     } 
     @if (!((List<string>)Session["searchPreferences"]).Contains("editorName")) 
     { 
       <td>editorName</td> 
     } 
    </tr> 


     @foreach (BookModel book in Model.bookList) 
     { 
     <tr class="element"> 
      @if (!((List<string>)Session["searchPreferences"]).Contains("Author")) 
      { 
       <td>@book.Author</td> 
      } 
      @if (!((List<string>)Session["searchPreferences"]).Contains("editorName")) 
      { 
       <td>@book.editorName</td> 
      } 
     </tr> 
     + 1 <tr> </tr> ... for each 40 attributes in books 
    </table> 

我怎麼能到處去製作一個模板編輯器,其中包括搜索偏好(存儲在會話或在LOGUSER模型...

其他問題:

我已經掌握了使用@ Html.EditorFor(型號=> model.Books)的概念,它會循環把我的書單,但我如何確保它只顯示用戶想要的內容?就像我可以將某些參數傳遞給模板並使用傳遞的列表來驗證每個列?

有沒有更簡單的方法來寫下我的模板..有點像「讓我的書模型中的每個屬性,並創建一個行,如果用戶選擇了它」,因爲客戶端帶有一種新的分類方式他的書和我每次改變想法時都必須重新編碼一切......我曾經在我的前輩發生過的事經常發生。 (付款對於我的小經驗非常有用,所以即使項目開始出錯,客戶也拒絕讓我們重新從頭開始,我會盡力解決這個問題)

非常感謝您提前任何信息,幫助等......即使它是一個好的演示或博客條目的鏈接,將有所幫助。

+0

ok我真的四處走動並手動輸入,你可以使用會話項目,並檢查用戶是否喜歡顯示列,但我仍然喜歡親的輸入,因爲它感覺很奇怪(我只是拿來自視圖的代碼並將其放置在編輯器模板中,但其基本上同樣混亂,並且如果客戶端出現大的變化就容易自殺) –

回答

1

我不是100%確定你要做什麼,但是如果我正確地理解了你,你有一個用戶喜好列表,顯示在表格中。我對你的建議是建立一個已經按照你想要的方式格式化數據的視圖模型。

這意味着,當您將模型傳遞給視圖時,您只有用戶在其搜索首選項中指定的列和數據。

您可以擁有一個Book Object,它包含一列列,每個Column都是它自己的對象,帶有一個Label和一個Value。

public BookViewModel() List Data {get;組; } }

public Column() { string Label {get;組; } string Value {get;組; } }

加載模型時,您只能爲用戶想要的數據創建列。

您可能有更好的方式來設計它,我只是在一會兒的通知就想到了這一點。但我認爲你應該看看如何處理數據服務器端的過濾和格式化,而不是頁面上的Razor。

編輯器模板用於定製對象在html頁面上的表示方式,特別是如果該對象將在頁面上的很多位置使用,所以您不需要重複自己。它不是真正用於過濾數據。

讓我知道如果這沒有意義或我誤解了你。

+0

我問工作人員這件事,他說我們必須推入所有的數據,因爲用戶可以決定即時顯示什麼和不顯示......他不是今天也不是明天,但明天早上我會給他發一封電子郵件,告訴他爲什麼他不希望我去做。 否則我明白你的意思......多數民衆贊成我將如何處理這個自己,但我認爲他有一個很好的理由不太(他本週早些時候告訴我,但我忘了) –

+0

即使他想操縱數據這可以通過使用Javascript執行AJAX請求來完成,並且過濾仍將在服務器端完成,而很少等待用戶。如果他希望過濾器在客戶端完全動態化,那麼剃刀不會幫助你,(當你提交的時候它只會改變頁面),你需要在javascript中完成這一切(顯示/和隱藏數據)。 – AwDogsGo2Heaven

+0

我們無法完全按照你所說的做,因爲我沒有訪問模型,我們在db上調用了一個orm,但我只是用你正在討論的列列表捕獲視圖模型,現在我將使用它,tx –