在我的MVC项目中,我在我的视图中生成了一个图表
<img alt="Report Chart" src="/Home/GetChart" /></div>
调用返回FileContentResult的控制器
Function GetChart() As FileContentResult
Return File(MyChart(), "image/png")
End Function
mychart是一个私有子,它返回一个字节数组作为图表图像。
无论如何,我的问题是我希望这能从我在View上的下拉列表中生成不同的数据。因此,当点击帖子时,我将阅读所选项目并针对它生成图表。现在Dropdownlist和按钮工作正常,在post方法中,我可以使用“Request”读取所选下拉项目,或者将Dropdown id作为参数传递但是这不适用于图表,我无法读取下拉选项或传递它因为控制器是在html src标签中调用的。如何获取此控制器功能的下拉值。感谢任何帮助,谢谢
答案 0 :(得分: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
答案 1 :(得分:0)
您可以将所选下拉项的值(或ID)传递到它自己的实际src路径中。
类似的东西:
<img alt="Report Chart" src="/Home/GetChart/<%=ViewData["DropDownValue"]%>" />
(假设你已经确定DropDownValue可以安全地用在像这样的URL中)
这将为您提供{controller} / {action} / {id}
的路由地址根据传递给控制器方法的ID,您可以返回图像所需的数据。
如果您希望在没有回发到服务器的情况下更改图像,则需要使用Javascript更改src属性值,使用下拉列表中的新值填充{id}部分。
答案 2 :(得分:0)
为什么不将它作为参数传递:
<img
alt="Report Chart"
src="<%= Url.Action("GetChart", "Home", new { id = Model.SomePropertyThatDropDownIsBoundTo }) %>"
/>
答案 3 :(得分:0)
我可能会再次提到一个更简单的解决方案,以便将来参考,类似于上面的Jaime
<img alt="Report Chart" src="/Home/GetChart/<%=Request("ChartType") %>" /></div>
其中ChartType是下拉列表,它返回选定的值而不是SelectListItems的完整IEnumerable。
再次干杯