在MVC [C#]中访问内部项目变量

时间:2016-11-06 11:07:09

标签: c# asp.net-mvc

我的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()

中的每次迭代中更新

感谢您的回答。

2 个答案:

答案 0 :(得分:0)

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

如果要在视图上传递迭代,则必须:

  1. 传递train()方法的返回值(,如果有的话)来查看 或
  2. 创建要从train()迭代的View模型并将其传递给view( preferred
  3. https://stackoverflow.com/a/18608533/5929494

答案 1 :(得分:0)

您需要将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方法异步,但在返回视图之前不等待它的执行。该视图将具有占位符,并使用某种形式的客户端代码来监听更新,例如SignalR。然后,train方法会定期向客户端发送更新,然后最终发送完成的数据。