我正在尝试在视图中创建图表,内容(名称/系列/类型等)将全部由用户在视图中选择的控件确定。
只要我加载已经创建的图表,一切都很好,例如:
在我的观点中:
<controls above my graph>
<img src="@Url.Action("StatusGraph")"/>
<controls below my graph>
控制器内部
//Creates status graph as specified by the controls in parent partial view or using defaults
public ActionResult StatusGraph(){
return View();
}
最后是StatusGraph View :(通用图表this microsoft tutorial用作示例)
@{
// TODO: use the data from the model to draw a chart
var myChart = new Chart(width: 600, height: 400)
.AddTitle("Chart title")
.AddSeries(
name: "Employee",
xValue: new[] { "Peter", "Andrew", "Julie", "Mary", "Dave" },
yValues: new[] { "2", "6", "4", "5", "3" })
.Write();
}
正如我所说的那样工作得很完美,实际上在父视图中呈现图表而不是在它自己的单独窗口中(实际上是微软,为什么?),但是只要我尝试扩展StatusGraph方法来接受参数(只是图表标题开头)并将其传递给StatusGraph当浏览器尝试加载图片时,我收到404错误。
当我在扩展的StatusGraph方法中设置断点时,我尝试将标题传递给视图,代码永远不会停止,就像从未调用过一样。
我的问题是:我怎样才能做到这一点?如何将视图中的数据传递到另一个视图的操作。
谢谢!
答案 0 :(得分:1)
您可以/应该使用视图模型:
public class MyViewModel
{
public string Title { get; set; }
}
然后:
public ActionResult StatusGraph(MyViewModel model)
{
return View(model);
}
最后:
@model MyViewModel
@{
var myChart = new Chart(width: 600, height: 400)
.AddTitle(Model.Title)
.AddSeries(
name: "Employee",
xValue: new[] { "Peter", "Andrew", "Julie", "Mary", "Dave" },
yValues: new[] { "2", "6", "4", "5", "3" })
.Write();
}
并且在渲染图表时传递值:
<img src="@Url.Action("StatusGraph", new { title = "Chart title" })"/>
当然,也可以在控制器操作中定义值,而不是将它们作为参数传递给img
源:
public ActionResult StatusGraph()
{
var model = new MyViewModel
{
// TODO: could come from a database or something
Title = "Chart title"
};
return View(model);
}