2012-11-15 46 views
1

在我目前的項目中,我需要添加一項功能,允許用戶查看其上傳的PDF的縮略圖。我發現一個handy component實現了這一點(基本版本是免費的,但它足以滿足我目前的需求)。無論如何,該控件相當過時(2010),因此似乎沒有MVC支持。在演示他們描繪控制的使用爲這樣:在MVC中使用ASP.NET服務器控件?

視圖的標記:

<form method="post" runat="server" enctype="multipart/form-data"> 
     <asp:Panel ID="thumbnailsPanel" runat="server" /> 
</form> 

縮略圖控制通過代碼實例化,其表示的縮略圖對應的字節數組傳遞到控制和所述控制被添加到thumbnailsPanel

<script runat="server"> 
protected void DisplayThumbs_Click(object sender, System.EventArgs e) 
{ 
     Thumbnail thumbnail = new Thumbnail(); 
     thumbnail.SessionKey = sessionID; 
     thumbnail.Index = i; 
     thumbnailsPanel.Controls.Add(thumbnail); 
} 
</script> 

由於我不能宣佈我的剃鬚刀視圖Thumbnail控制,我將如何使用MVC這種控制?我花了幾個小時試圖使這個控件MVC友好無濟於事,最好的我想出的是在我的項目中包含一個.ASPX視圖(not.cshtml),並在該視圖上呈現Thumbnail控件。顯然這是不可取的。

那麼你會如何去使用MVC中的ASPX服務器控件?這個想法完全不好,不應該練習嗎?

+1

一些思考:也許嘗試ImageMagick的。 NET或PDFSharp轉換爲圖像,GDI將圖像轉換爲PDF?通過構建一個組件而不是一個Web窗體控件,您可以在控制器中訪問它。 – bryanjonker

+0

Microsoft不支持在ASP.NET應用程序中使用GDI,並且不能將圖像「轉換」爲PDF。 – Dai

+0

可能的重複[爲什麼我不能在ASP.net MVC中使用服務器控件?](http://stackoverflow.com/questions/9039019/why-cant-i-use-server-controls-in-asp-net -mvc) – jrummell

回答

3

我通過將控件重新實現爲HtmlHelper來解決它,假設控制不太複雜,那麼它也適用於你。這樣做:

  1. 使用反射
  2. 按摩的源,因此它實際上編譯轉儲控制的來源(來自反射源通常不會編譯直線距離)
  3. 確定什麼狀態的控制了。將狀態從成員屬性轉換爲它自己的新ViewModel類的成員。
  4. 找到Render方法並將其轉換爲使用ViewContext.Writer

例如一個的HtmlHelper:

public class FooControl : Control { 
    public String Message { get; set; } 

    public override void Render(HtmlTextWriter wtr) { 
     wtr.WriteLine("<p>"); 
     wtr.WriteLine(message); 
     wtr.WriteLine("</p>"); 
    } 
} 

變爲這樣:

public class FooViewModel { 
    public String Message { get; set; } 
} 

// This method should exist in a static Extensions class for HtmlHelper 
public static void Foo(this HtmlHelper html, FooViewModel model) { 
    HtmlTextWriter wtr = html.ViewContext.Writer; 
    wtr.WriteLine("<p>"); 
    wtr.WriteLine(model.Message); 
    wtr.WriteLine("</p>"); 
} 
+0

謝謝。如何做到這一點的任何機會鏈接到一個例子? –

+0

我提供了一個例子。 – Dai

+0

有免費的反射軟件嗎?似乎無法找到一個。 –

相關問題