在MVC [c#]中访问内部项目的变量变化
本文关键字:项目 内部 变量 变化 访问 MVC | 更新日期: 2023-09-27 18:16:39
我有一个内部项目(分隔文件夹)在我的MVC应用程序。它包含我的一个项目的类。然后这个项目有一个控制器以及初始化它的方法如下所示:
[HttpPost]
public ActionResult initiate() {
// System.Diagnostics.Debug.WriteLine("Initiated");
Network net = new Network(normalizeInput);
net.train();
// System.Diagnostics.Debug.WriteLine("average error :" + net.averageError);
double err = net.averageError;
ViewBag.err = err.ToString();
return View("initiate");
}
及其视图:
@{
ViewBag.Title = "initiate";
}
<h3>Everything is prepared</h3>
<!--<button type="button" onclick="location.href='@Url.Action("initiate", "BackpropController")'"/> -->
@using (Html.BeginForm("initiate", "Backprop", FormMethod.Post)) {
@Html.AntiForgeryToken()
<input type="submit" value="Initiate" />
}
<br>
<br>
@{ string averageError = ViewBag.err;
if (averageError != null) {
<h4>@averageError</h4> }
else { <h4>no error</h4>}
}
问题是:我如何在视图中显示每次迭代更新的值?因为这个变量是最终变量,但是方法train()
包含循环平均误差是这样的:averageError += Math.Abs(testingSet[j].desiredOutput - neuron.getOutput());
我很感兴趣,因为我想做一个误差图,因为它是迭代的函数。简而言之:
f(误差,迭代)
图形应该放在我发布的视图中,并且应该在方法train()
中的每次迭代中更新
谢谢你的回答
我不确定我是否正确理解了你的问题。
如果你想在你的视图上传递迭代,你必须:
- 传递train()方法返回值(如果有)给视图或
- 创建你想要从train()迭代的视图模型并将其传递给视图(优选)
您需要从Network类训练方法返回averageError值给控制器。例如,您可以使用Network类中的属性来完成此操作,例如…
class Network {
//your other code
public IEnumerable<double> averageErrors {get; set;}
public void train() {
averageErrors = new List<double>();
for (//your loop) {
averageError += Math.Abs(testingSet[j].desiredOutput - neuron.getOutput());
averageErrors.Add(averageError);
}
}
}
然后在你的控制器中…
[HttpPost]
public ActionResult initiate() {
// System.Diagnostics.Debug.WriteLine("Initiated");
Network net = new Network(normalizeInput);
net.train();
// System.Diagnostics.Debug.WriteLine("average error :" + net.averageError);
double err = net.averageError;
// you now have a list of averageErrors in your controller to use as you please
List<double> allErrors = net.averageErrors;
ViewBag.err = err.ToString();
return View("initiate");
}
这使您可以访问在 train方法完成后的所有平均错误,因此您可以在视图中报告您喜欢的任何方式。
如果train是一个长时间运行的方法,并且您希望在方法运行时显示平均误差的实时更新,那么事情将变得有点复杂。我将使用的一般方法是使train方法异步,但在返回视图之前不等待它的执行。视图将有占位符,并使用某种形式的客户端代码来侦听更新,例如SignalR。然后,train方法将定期向客户端发送更新,然后最后发送完成的数据。