vi faccio un altro esempio completo.
questo il model:
codice:
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
namespace Easymatica.Somministrazione.Web.UI.Models.PianoLavoro
{
public class NuovoPianoLavoroModel
{
public IEnumerable<SelectListItem> TipologiaPianoLavoro { get; set; }
[Required]
[Display(Name = "Descrizione")]
public string Descrizione { get; set; }
[Required]
[Display(Name = "Presidio")]
public string Presidio { get; set; }
[Required]
[Display(Name = "Data Inizio")]
public string DataInizio { get; set; }
[Required]
[Display(Name = "Data Fine")]
public string DataFine { get; set; }
[Required]
[Display(Name = "Ora Inizio")]
public string OraInizio { get; set; }
[Required]
[Display(Name = "Ora Fine")]
public string OraFine { get; set; }
[Display(Name = "Tipologia")]
[Range(1, long.MaxValue, ErrorMessage = "Il campo {0} è obbligatorio.")]
public long Tipologia { get; set; }
}
public class PianoLavoroTipo
{
[Display(Name = "Id")]
public long Id { get; set; }
[Display(Name = "Tipologia")]
public string Tipologia { get; set; }
}
}
questo il controller:
codice:
using Easymatica.Somministrazione.Web.UI.Models.PianoLavoro;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
namespace Easymatica.Somministrazione.Web.UI.Controllers
{
public class PianoLavoroController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Nuovo(NuovoPianoLavoroModel model)
{
if (model == null)
{
model = new NuovoPianoLavoroModel();
}
List<PianoLavoroTipo> list = new List<PianoLavoroTipo>
{
new PianoLavoroTipo
{
Id = 1,
Tipologia = "Tipologia 1"
},
new PianoLavoroTipo
{
Id = 2,
Tipologia = "Tipologia 2"
}
};
model.TipologiaPianoLavoro = list.Select(x =>
new SelectListItem()
{
Value = x.Id.ToString(),
Text = x.Tipologia
}
);
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult NuovoPianoLavoro(NuovoPianoLavoroModel viewModel, string returnUrl = "")
{
if (!ModelState.IsValid)
{
return View(viewModel);
}
if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
return Redirect(returnUrl);
return RedirectToAction("Index", "PianoLavoro");
}
}
}
rispetto ad altri esempi, ho aggiunto anche l'action per recuperare i dati in post.
questa la view:
codice:
@model NuovoPianoLavoroModel
@{
ViewBag.Title = "Nuovo Piano lavoro";
}
@section styles {
@Styles.Render("~/css/validation")
}
<div class="container div_page_cont div_page_cont_nuovo">
<div class="card">
<div class="card-header">
<span class="pt-2">
<b>PIANO LAVORO</b>
</span>
</div>
<div class="card-body">
@Html.ValidationSummary()
@using (Html.BeginForm("NuovoPianoLavoro", "PianoLavoro", FormMethod.Post, new { id = "nuovo_mug_form" }))
{
@Html.AntiForgeryToken()
<div class="row">
<div class="col-md-6">
<div class="form-group">
@Html.LabelFor(m => m.Descrizione)
@Html.TextBoxFor(m => m.Descrizione, new { @class = "form-control", @placeholder = "Es. Spostato su", autofocus = "autofocus" })
@Html.ValidationMessageFor(m => m.Descrizione)
</div>
</div>
<div class="col-md-6">
<div class="form-group">
@Html.LabelFor(m => m.Tipologia)
@Html.DropDownListFor(m => m.Tipologia, Model.TipologiaPianoLavoro, "Seleziona una tipologia", new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Tipologia)
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
@Html.LabelFor(m => m.Presidio)
@Html.TextBoxFor(m => m.Presidio, new { @class = "form-control", @placeholder = "Es. 12345698781" })
@Html.ValidationMessageFor(m => m.Presidio)
</div>
</div>
<div class="col-md-6"></div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
@Html.LabelFor(m => m.DataInizio)
<div class="input-group date" id="DataInizio" data-target-input="nearest">
@Html.TextBoxFor(m => m.DataInizio, new { @class = "form-control datetimepicker-input input_date", data_target = "#DataInizio" })
<div class="input-group-append" data-target="#DataInizio" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fa fa-calendar"></i></div>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
@Html.LabelFor(m => m.DataFine)
<div class="input-group date" id="DataFine" data-target-input="nearest">
@Html.TextBoxFor(m => m.DataFine, new { @class = "form-control datetimepicker-input input_date", data_target = "#DataFine" })
<div class="input-group-append" data-target="#DataFine" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fa fa-calendar"></i></div>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
@Html.LabelFor(m => m.OraInizio)
<div class="input-group date" id="OraInizio" data-target-input="nearest">
@Html.TextBoxFor(m => m.OraInizio, new { @class = "form-control datetimepicker-input input_date", data_target = "#OraInizio" })
<div class="input-group-append" data-target="#OraInizio" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fa fa-calendar"></i></div>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
@Html.LabelFor(m => m.OraFine)
<div class="input-group date" id="OraInizio" data-target-input="nearest">
@Html.TextBoxFor(m => m.OraFine, new { @class = "form-control datetimepicker-input input_date", data_target = "#OraFine" })
<div class="input-group-append" data-target="#OraFine" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fa fa-calendar"></i></div>
</div>
</div>
</div>
</div>
</div>
}
</div>
</div>
</div>
<script type="text/javascript">
$(function () {
$('#DataInizio').datetimepicker({
format: 'L',
locale: 'it'
});
$('#DataFine').datetimepicker({
format: 'L',
locale: 'it'
});
$('#OraInizio').datetimepicker({
format: 'LT',
locale: 'it'
});
$('#OraFine').datetimepicker({
format: 'LT',
locale: 'it'
});
});
</script>
@section scripts {
@Scripts.Render("~/js/validation")
}
secondo me il problema potrebbe essere qualcosa legato al controller e al form!