C#MVC-将字符串转换为变量
本文关键字:变量 转换 字符串 C#MVC- | 更新日期: 2023-09-27 18:21:27
如何将字符串转换为变量?我有一个字符串列表,我希望能够循环使用这些字符串并从我的模型中调用数据。
我的代码:
控制器:
List<string> reportContentsCharts = new List<string>();
//Pseudo Code
//If chart is selected added it to reportContents. So in the view instead of calling @Model.getChart1 from the view I can reference this reportContents.
//For Example:If chart1 and chart2 are selected
reportContentsCharts.Add("getChart1");
reportContentsCharts.Add("getChart2");
IndexViewModel viewModel = new IndexViewModel()
{
chart1 = makeChart1(DictionaryofData), //Returns an image and sends to IndexViewModel
chart2 = makeChart2(DictionaryofData),
chart3 = makeChart2(DictionaryofData),
chart4 = makeChart2(DictionaryofData),
chart5 = makeChart2(DictionaryofData),
chart6 = makeChart2(DictionaryofData),
reportContentsCharts = reportContentsCharts
}
private byte[] makeChart1(Dictionary<string, Double> DictionaryofData)
{
//code to construct chart and return as an image.
}
IndexViewModel:
public Byte[] chart1 { get; set; }
public Byte[] chart2 { get; set; }
public Byte[] chart3 { get; set; }
public Byte[] chart4 { get; set; }
public Byte[] chart5 { get; set; }
public Byte[] chart6 { get; set; }
//This code is repeated for all 6 charts
public string getChart1
{
get
{
string mimeType = "image/png";
string base64 = Convert.ToBase64String(chart1);
return string.Format("data: {0}; base64, {1}", mimeType, base64);
}
}
视图:
<table>
for(int z = 0; z< Model.reportContentsCharts.Count / 2 ;z++) //At most 2 charts can be selected
{
<tr>
<td ="center">
<img src=@Model.reportContentsCharts[z]/>
</td>
<td ="center">
<img src=@Model.reportContentsCharts[z+1] />
</td>
</tr>
}
</table>
潜在问题:目前,当我运行此代码时,它会返回一个损坏的图像。我想这可能是语法问题?我有一些图表可以显示在我的网页上。根据用户的输入,将只显示选定的几个图形。我做的第一件事是为每个图在html中硬编码一个位置,然后使用if()语句来确定是否显示该图。这样做的问题是,根据用户输入,所选的图形可以出现在单独的行上。这会产生不好的对齐和间距问题。
我知道这可能不是最好的方法,但我觉得这是最简单的解决方案。
感谢您的任何建议或帮助。
在我看来,问题的根源似乎是设计糟糕的ViewModel。你需要规范它:
private Dictionary<string, byte[]> Charts = new Dictionary<string, byte[]>();
public string GetChart(string name)
{
get
{
string mimeType = "image/png";
string base64 = Convert.ToBase64String(Charts[name]);
return string.Format("data: {0}; base64, {1}", mimeType, base64);
}
}
public string AddChart(string name, byte[] data)
{
Charts[name] = data;
}
然后你可以把你的控制器写成这样:
IndexViewModel viewModel = new IndexViewModel()
{
reportContentsCharts = reportContentsCharts
}
for (int i = 0; i < 6; i++)
{
viewModel.AddChart("chart" + i, makeChart("chart" + i, DictionaryOfData));
}
最后,你可以这样写你的观点:
<table>
for (int z = 0; z < Model.reportContentsCharts.Count; z += 2)
{
<tr>
for (int c = z; c < z + 2; c++)
{
<td align="center">
if (c < Model.reportContentsCharts.Count)
{
<img src="@Model.GetChart(Model.reportContentsCharts[c])"/>
}
</td>
}
</tr>
}
</table>