MVC - FileContentResult因Dropdownlist选择而异

时间:2009-11-06 11:48:13

标签: asp.net-mvc

在我的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标签中调用的。如何获取此控制器功能的下拉值。感谢任何帮助,谢谢

4 个答案:

答案 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。

再次干杯