Aspnet MVC: проблема со значением по умолчанию для текстового поля для - PullRequest
0 голосов
/ 10 октября 2018

Я новичок в aspnet mvc и не могу решить эту проблему:

У меня есть представление Создать в форме с 2 кнопками отправки, одна из них - стандартная кнопка сохранения -> магазинданные после проверки и перенаправления на страницу индекса.Другой сохраняет данные, а затем перенаправляет на ту же страницу, пропуская модель таким образом, чтобы предварительно заполнить поля некоторых форм.Моя проблема заключается в следующем: на мой взгляд, у меня есть несколько числовых полей ввода, как это:

 @Html.LabelFor(model => model.SpessoreMm)
 @Html.TextBoxFor(model => model.SpessoreMm, new {@type="number", @min=0, @max=Int32.MaxValue, @Value=0, @class="form-control", style="margin: auto;"})
 @Html.ValidationMessageFor(model => model.SpessoreMm, "", new { @class = "text-danger col-md-12" })

, и это часть моего контроллера:

  if (submit == "Crea Nuovo") // this is the second button 
        {
            _db.Scarico.Add(scarico);
            _db.SaveChanges();
            ViewBag.CaricoId = new SelectList(_registrationsManager.GetActiveKart(scarico.CaricoId), "Id", "Text", scarico.CaricoId);
            return View(scarico); // if I set a breakpoint I see the model with correct value
        }

Если я установил атрибут @Value =0 это значение переопределяет значение, переданное из модели, вместо этого, если я не установил значение по умолчанию, контроллер выдает мне сообщение об ошибке при попытке сохранить данные.

Как мне решить мою проблему?

Я думал установить числовое поле в 0 перед сохранением на моем контроллере, но это не элегантный способ: D

заранее спасибо

1 Ответ

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

Мы можем перейти к следующим

Просмотр действий модели и контроллера

public class scarico
{
    public int SpessoreMm { get; set; }
}

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Tut129(scarico solidoViewModel, string submit)
    {
        if (submit == "Crea Nuovo") // this is the second button 
        {
            if (ModelState.IsValid)
            {
                //add the entity here
                //_db.Scarico.Add(scarico);
                //_db.SaveChanges();
            }

            //ViewBag.CaricoId = new SelectList(_registrationsManager.GetActiveKart(scarico.CaricoId), 
            //    "Id", "Text", scarico.CaricoId);
            return View(solidoViewModel); // if I set a breakpoint I see the model with correct value
        }

        //first button pushed so *save data* and redirect to index
        return RedirectToAction("Index");
    }

    public ActionResult Tut129()
    {
        //Not initalizing property, so non null value type int will be zero
        scarico solidoViewModel = new scarico();
        return View(solidoViewModel);
    }

.cshtml

@model Testy20161006.Controllers.scarico
    @{
        Layout = null;
    }

    <!DOCTYPE html>

    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Tut129</title>
    </head>
    <body>
        @using (Html.BeginForm())
        {

            @Html.LabelFor(model => model.SpessoreMm)
            @Html.TextBoxFor(model => model.SpessoreMm,
                //!!! Removing @Value = 0, and using passed value from action, if not set in action then non
                //null value type int will be zero
        new { @type = "number", @min = 0, @max = Int32.MaxValue, @class = "form-control", style = "margin: auto;" })
            @Html.ValidationMessageFor(model => model.SpessoreMm, "", new { @class = "text-danger col-md-12" })

            <input type="submit" name="submit" value="Standard Save" />
            <input type="submit" name="submit" value="Crea Nuovo" />
        }
    </body>
</html>
...