在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()中的每次迭代中更新

谢谢你的回答

在MVC [c#]中访问内部项目的变量变化

我不确定我是否正确理解了你的问题。

如果你想在你的视图上传递迭代,你必须:

  1. 传递train()方法返回值(如果有)给视图或
  2. 创建你想要从train()迭代的视图模型并将其传递给视图(优选)
https://stackoverflow.com/a/18608533/5929494

您需要从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方法将定期向客户端发送更新,然后最后发送完成的数据。