Как вывести результат в POST контроллера?

97
18 февраля 2021, 10:20

Собственно создал представление

<div>
<form method="post" action="">
    <b>Function</b>
    y = <input type="number" name="a" />x^2 + <input type="number" name="b" />x + <input type="number" name="c" />
    <br />
    <br />
    <b>Step</b>
    <input type="number" name="Step" />
    <br />
    <br />
    <b>From</b>
    <input type="number" name="RangeFrom" />
    <b>To</b>
    <input type="number" name="RangeTo" />
    <br />
    <br />
    <br />
    <input type="button" value="PLOT" />
</form>

Создал модель

public class UserDataModel
{
    public int UserDataId
    {
        get;
        set;
    }
    public int RangeFrom
    {
        get;
        set;
    }
    public int RangeTo
    {
        get;
        set;
    }
    public float Step
    {
        get;
        set;
    }
    public int a
    {
        get;
        set;
    }
    public int b
    {
        get;
        set;
    }
    public int c
    {
        get;
        set;
    }
}

И наконец создал логику

public class FuncLogic
{
    List<double> yList = new List<double>();
    public  List<double> Fx(double a,double b,double c, double step,double fromX,double toX)
    {
        double y;
        for (double x = fromX; x < toX; x += step)
        {
            y = (a * Math.Pow(x, 2)) + (b * x) + c;
            yList.Add(y);
        }
        return yList;
    }
}

И к сожалению не могу понять как все это дело связать в контроллере(я новичок в асп) веб приложение должно считать функцию

[HttpGet]
public ActionResult Index()
{
    return View();
}

[HttpPost]
public ActionResult Index(UserDataModel data)
{
    FuncLogic fl = new FuncLogic();
    fl.Fx(data.a, data.b, data.c, data.Step, data.RangeFrom, data.RangeTo);
    return View();
}

это что-то типо моего контроллера он даже считает что-то

Answer 1

Экшн контроллера для отображения:

[HttpPost]
public ActionResult Index(UserDataModel data)
{
    FuncLogic fl = new FuncLogic();
    var result = fl.Fx(data.a, data.b, data.c, data.Step, data.RangeFrom, data.RangeTo);
    return View(result);
}

Представление для этого экшена:

@model List<double>
<h1>Results</h1>
<ul>
@foreach(var item in Model)
{
   <li>item</li>
}
</ul>

Итого, у вас будет два экшена. Один работает на Get, у него своя view (и у этого представления есть отдельная модель, вы правда её не указали в представлении, а зря: у строго типизированных представлений есть свои удобные плюшки), второй работает на Post, у него своя view (и у этого представления модель List<double>, поэтому отдельного класса не надо).

Теперь вам нужно всё это дело собрать вместе. Для одного и того же action вы не сможете указать два view, поэтому нужно сделать одно из двух.

Либо сделать разные имена у экшенов, удобнее это сделать через ActionName - см. тут: https://stackoverflow.com/a/6536978/5752652

Либо в одном представлении сделать вывод и Get и Post.

Обычно делают по первому варианту, так получается код чище и нагляднее.

READ ALSO
Ошибка преобразования типа IPoint в JSON

Ошибка преобразования типа IPoint в JSON

В таблице базы данных PostgreSQL есть столбец (nodeCoordinates) где хранятся координаты (тип geography)Данный столбец связан с моделью в приложении ASP

126
Как дублировать картинку?

Как дублировать картинку?

есть PictureBox1 который расположен на форме и он производит движение по таймеру

139
Освобождение ресурсов в деструкторе C#

Освобождение ресурсов в деструкторе C#

В конструкторе объекта класса осуществляется подключение к БД MySQL, в деструкторе подключение закрываетсяДопустимо ли подобное в C#?

114
Парсинг одинаковых тегов в HtmlAgilityPack

Парсинг одинаковых тегов в HtmlAgilityPack

Моя проблема заключается в том, что у меня есть несколько тегов и они одинаковыеМне необходимо сделать парсинг первого тега из этих нескольких...

106