Asp.net mvc MVC-FileContentResult根据下拉列表选择的不同而不同

Asp.net mvc MVC-FileContentResult根据下拉列表选择的不同而不同,asp.net-mvc,Asp.net Mvc,在我的MVC项目中,我的视图上也生成了一个图表 <img alt="Report Chart" src="/Home/GetChart" /></div> 其中mychart是一个私有子对象,返回作为图表图像的字节数组 无论如何,我的问题是,我希望它从视图上的dropdownlist生成不同的数据。因此,当点击帖子时,我将阅读所选项目并根据它生成图表。现在Dropdownlist和按钮工作正常,在post方法中,我可以使用“请求”或通过将下拉id作为参数传递来读取所选的

在我的MVC项目中,我的视图上也生成了一个图表

<img alt="Report Chart" src="/Home/GetChart" /></div>
其中mychart是一个私有子对象,返回作为图表图像的字节数组

无论如何,我的问题是,我希望它从视图上的dropdownlist生成不同的数据。因此,当点击帖子时,我将阅读所选项目并根据它生成图表。现在Dropdownlist和按钮工作正常,在post方法中,我可以使用“请求”或通过将下拉id作为参数传递来读取所选的下拉项。但是,这不适用于图表,我无法读取下拉选择或传递它,因为在html src标记中调用了控制器。如何获取该控制器函数的下拉列表值。感谢您的帮助,您可以将所选下拉项的值(或ID)传递到其自身的实际src路径中

比如:

<img alt="Report Chart" src="/Home/GetChart/<%=ViewData["DropDownValue"]%>" />
“/>
(假设您已确保在这样的URL中使用DropDownValue是安全的)

这将为您提供路由地址{controller}/{action}/{id}

根据传递给控制器方法的id,可以返回图像所需的数据


如果希望在不回发到服务器的情况下更改图像,则需要使用Javascript更改src属性值,用下拉列表中的新值填充{id}部分。

为什么不将其作为参数传递:

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

您需要使用javascript来完成此操作。请注意,您还需要在模型参数上使用Url.Action helper设置初始图表id。我使用InitialChart作为变量来保存默认的图表id

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

我可能会再次提到一个更简单的解决方案,以供将来参考,类似于上面的Jaime

<img alt="Report Chart" src="/Home/GetChart/<%=Request("ChartType") %>" /></div>
“/>
如果ChartType是dropdownlist,则返回选定值,而不是SelectListItems的完整IEnumerable


再次为大家干杯

谢谢大家,我把这个作为正确答案,因为它是最详细的,但所有帖子都有帮助:)
<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
<img alt="Report Chart" src="/Home/GetChart/<%=Request("ChartType") %>" /></div>