【问题标题】:Acessing change of variable of an internal project in MVC [C#]在 MVC [C#] 中访问内部项目的变量更改
【发布时间】:2016-11-06 11:07:09
【问题描述】:

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

感谢您的回答。

【问题讨论】:

  • 能否修改 net.train() 方法?
  • 是的,我是。问题是,当我在控制器方法中创建实例并调用 train() 方法时,我只能传递最终值...

标签: c# asp.net-mvc


【解决方案1】:

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

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

  1. 传递train()方法返回值(如果有)查看 或
  2. 创建要从 train() 迭代的视图模型并将其传递给视图(首选

https://stackoverflow.com/a/18608533/5929494

【讨论】:

  • 感谢您的回答。就像我想在视图中看到一个标签,并且应该有值(例如迭代次数或错误值)在方法 train() 中的每次迭代都发生变化我无法传递最终值,但是该值正在调整每次迭代并且我想让它可见..我需要它来制作一个情节,就像我提醒的那样。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-03-08
    • 2012-05-25
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 2015-02-11
    • 2013-07-08
    • 2011-08-04
    相关资源
    最近更新 更多