Переменная MVC Models не обновляется - PullRequest
0 голосов
/ 15 октября 2018

Проект представляет собой калькулятор только с кнопками и одним полем метки для выражения и вывода.

После нажатия любой кнопки появляется POST для одной из двух функций.Вот контроллер

public class CalculatorController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public IActionResult AddToExpresion(string _char, CalculatorViewModel CVM)
    {
        CVM.Expression += _char;
        return View("Index", CVM);
    }
}

А вот вид

@model WebApplication1.Models.CalculatorViewModel
@{
    ViewData["Title"] = "Calculator";
}

<h2>Calculator</h2>

<form asp-controller="Calculator" asp-action="Calculate" method="post">
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-3">
                <label asp-for="Expression">@Html.DisplayFor(x => x.Expression)</label>
                <input asp-for="Expression" type="hidden" />
            </div>
        </div>
        <div class="row">
            <button type="submit" class="btn" asp-action="AddToExpresion" asp-route-_char="(">
                (
            </button>
            <button type="submit" class="btn" asp-action="AddToExpresion" asp-route-_char=")" >
                )
            </button>
            <button type="submit" class="btn" asp-action="AddToExpresion" asp-route-_char="%">
                %
            </button>
            <button type="button" class="btn" value="AC">
                AC
            </button>
        </div>
..
    </div>
</form>

Проблема в том, что когда вызывается AddToExpression, сначала выражение равно нулю (правильно), а затем после второй попытки оно все еще равно нулю (должно быть предыдущим символом). Почемутак?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Параметры в методе AddToExpresion должны соответствовать полям, созданным в представлении.Существуют различные способы доступа к параметрам в представлении:

  1. Создайте параметр, который соответствует модели представления, как вы это делали, но параметр _char должен совпадать с полем в представлении.
  2. Или используйте объект FormCollection для доступа к отправленным параметрам по форме.
  3. Или используйте настраиваемую привязку объекта, которая наследуется от объекта IModelBinder.

Cordialement

0 голосов
/ 15 октября 2018

Если он не привязан к входу, значение не отправляется с вашей формой.Итак, если вам нужно сохранить символы из предыдущей заявки, вам нужно добавить данные в форму.Не знаком с новым синтаксисом помощника, но это должно работать:

<div class="col-md-3">
    <label asp-for="Expression">@Html.DisplayFor(x => x.Expression)</label>
    <input asp-for="Expression" type="hidden" />
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...