2009-11-06 50 views
2

在我的MVC項目我有一個圖表上我的看法所產生的這樣MVC - FileContentResult不同,這取決於下拉列表選擇

<img alt="Report Chart" src="/Home/GetChart" /></div> 

其中要求控制器返回FileContentResult

Function GetChart() As FileContentResult 
    Return File(MyChart(), "image/png") 
End Function 

哪裏mychart是返回一個字節數組作爲圖表圖像的私有子。

無論如何,我的問題是,我希望這從生成不同的數據關於我在視圖上的下拉列表。所以當帖子被點擊時,我會讀取選定的項目並根據它生成圖表。現在,Dropdownlist和按鈕可以正常工作,並且在post方法中,我可以使用「請求」或傳遞Dropdown id作爲參數來讀取選定的下拉列表項,但這不適用於圖表,我無法讀取下拉選擇或傳遞它因爲控制器正在html src標記中被調用。我怎樣才能得到這個控制器功能下拉的值。任何幫助表示讚賞,謝謝

回答

3

您將需要使用JavaScript來做到這一點。請注意,您還需要在模型參數上使用Url.Action助手設置初始圖表ID。我使用InitialChart作爲變量來保存默認圖表ID。

$(function() { 
    $('#chartDropdown').change(function() { 
     $('#reportChart').attr('src', '<%= Url.Action("Chart", "Home") %>' 
      + '/' + $(this).val()); 
    }); 
}); 

然後改變你的標記(圖)

<img id="reportChart" 
    alt="Report Chart" 
    src='<%= Url.Action("Chart", "Home", new { id = Model.InitialChart }) %>' 
    /> 

和你的行動

Function GetChart(ByVal id as Integer) As FileContentResult 
    Return File(MyChart(id), "image/png") 
End Function 
+0

感謝所有,我已經把這個作爲,因爲它是最詳盡的正確答案,但所有帖子幫助:) – Israfel 2009-11-06 13:01:10

0

您可以將所選下拉列表項的值(或ID)傳遞到它自己的實際src路徑中。

喜歡的東西:

<img alt="Report Chart" src="/Home/GetChart/<%=ViewData["DropDownValue"]%>" /> 

(假設您確認DropDownValue是安全的這樣一個URL中使用)

這會給你的路由地址爲{控制器}/{動作}/{id}

根據傳遞給控制器​​方法的id,您可以返回所需的圖像數據。

如果您希望在不向服務器回發的情況下更改圖片,則需要使用Javascript更改src屬性值,並使用下拉菜單中的新值填充{id}部分。

0

爲什麼不把它作爲參數:

<img 
    alt="Report Chart" 
    src="<%= Url.Action("GetChart", "Home", new { id = Model.SomePropertyThatDropDownIsBoundTo }) %>" 
/> 
0

我可能會再次提一個簡單的解決方案,我碰到以供將來參考,類似於海梅的上方

<img alt="Report Chart" src="/Home/GetChart/<%=Request("ChartType") %>" /></div> 

其中ChartType是下拉列表,這將返回選定的值而不是完整的IEnumerable的SelectListItems。

乾杯再次傢伙