Aspnet MVC: проблема со значением по умолчанию для текстового поля для
Я новичок в 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 ответ
Мы можем пойти по следующему
Просмотр модели и действий контроллера
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>