2012-02-19 9 views
0

我一般新的ASP.NET和我修改我繼承了一些代碼。有創建使用一個選擇框的代碼段基於該年代由用戶輸入的搜索項的ListBoxFor如何輸出HTML表,而不是在ASP.NET一個選擇框(與ListBoxFor產生的)?

@Html.ListBoxFor(m => m.SelectedItem, 
       Lookup.Models.myService.Search(Model.SearchTerm, 
             null == Model.SelectedCity ? 1 : 
             Int32.Parse(Model.SelectedCity)) 

Search()的簽名是:

public static List<SelectListItem> Search(string term, string city) 

而不是顯示選擇框,我想輸出一個HTML表格,而不是數據。我甚至不知道如何去這樣做還是真的什麼信息給你所有這些都是爲了幫助我:)

回答

3

的ListBoxFor幫手顯示<select>元素與multiple="multiple"屬性允許多項選擇。如果你想要別的東西,你不應該使用這個幫手。所以你說你想要一個HTML表格。現在

,有一些非常嚴重的問題,你已經顯示的代碼。您在視圖內呼叫Lookup.Models.myService.Search。視圖不應該從某些地方提取數據。他們應該正在由一個控制器動作傳遞給他們的模型的形式下只顯示數據。所以這個電話不應該在視圖中完成。它應該事先做好,結果作爲屬性存儲在您的視圖模型上:

public IEnumerable<SelectListItem> Items { get; set; } 

無論如何。第一種可能性是自己寫的標記:

<table> 
    <thead> 
     <tr> 
      <th>Value</th> 
      <th>Text</th> 
     </tr> 
    </thead> 
    <tbody> 
     @foreach (var item in Model.Items) 
     { 
      <tr> 
       <td>@item.Value</td> 
       <td>@item.Text</td> 
      </tr> 
     } 
    </tbody> 
</table> 

當然這種寫作碼一遍遍可能成爲累贅。所以你可以在DisplayTemplate中將其外化。例如,你可以把它放在一個~/Views/Shared/DisplayTemplates/MyTableTemplate.cshtml裏面,然後當你需要在視圖中渲染時,你可以使用:

@Html.DisplayFor(x => x.Items, "MyTableTemplate") 
相關問題