Je travaille sur un problème mvc et j'ai trouvé mon auto coincé dans un problème en essayant de lier les données datetimepicker à mon action de contrôleur. J'ai une vue qui ajoute un partiel à la collection de vues partielles lorsque l'utilisateur fait une action.Boostrap Datetimepicker avec Html.hiddenpour ne pas lier les valeurs dans l'action du contrôleur
Mes modèles ressemble
public class CreateOCVM
{
private string errors { get; set; }
public operaciones_confidenciales oc { get; set; }
[Display(Name = "Restringidas")]
public ICollection<PersonaMin> restringidas { get; set; }
public class PersonaMin
{
public int Id { get; set; }
public string motivo { get; set; }
[DataType(DataType.Date)]
public DateTime fecha_acceso;
À mon avis je
@using (Html.BeginForm("CreateOC", "OC", FormMethod.Post, new { id = "form" }))
<table id="personasRestringidas" class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>id</th>
<th>Motivo</th>
<th>Fecha de acceso</th>
<th>Eliminar</th>
</tr>
</thead>
<tbody id="person">
@foreach (PersonaMin item in Model.restringidas)
{
@Html.Partial("~/Views/OC/AddOCRestriccion.cshtml", item)
}
</tbody>
</table>
Lorsque l'utilisateur fait une ations ajouter un nouvel élément à la restringidas ICollection. En faisant un appel ajax à une méthode de commande comme suit:
function addRestriccion(idPersona) {
if (jQuery.inArray(idPersona, dataset) != 0) {
$.get('/OC/AddOCRestriccion', { id: idPersona}, function (template) {
dataset.push(idPersona);
$("#person").append(template);
$('#datetimepicker' + idPersona).datetimepicker();
$('#datetimepicker' + idPersona).datetimepicker({ format: "DD/MM/YYYY hh:mm" });
$("#datetimepicker" + idPersona).on("change.dp", function (e) {
$('#fechaAcceso' + idPersona).val($("#datetimepicker" + idPersona).datepicker('getFormattedDate'))
});
});
}
Cet appel d'une méthode de commande d'un retourne une vue partielle qui sera ajouté à la vue principale.
[HttpGet]
public ActionResult AddOCRestriccion(Int32 id)
{
PersonaMin item = new PersonaMin();
item.Id = id;
persona p = PersonaCollection.getPersonasById(id);
return PartialView("AddOCRestriccion", item);
}
Edit: Ce contrôleur renvoie la vue partielle d'ajouter dans le principal.
<tr>
@using (Html.BeginCollectionItem("restringidas"))
{
<td>
@Html.HiddenFor(model => model.Id)
@Html.DisplayFor(model => model.Id, new { @placeholder = "id", @id = "ID" })
</td>
<td>
@Html.TextAreaFor(model => model.motivo, new { @placeholder = "motivo", @id = "motivo", @class = "form-control" })
</td>
<td>
<div class='input-group date' id="@("datetimepicker" + Model.Id)">
<input type='text' class="form-control" />
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
@Html.HiddenFor(model => model.fecha_acceso, new { @id = "fechaAcceso" + Model.Id })
</div>
</td>
<td class="text-center">
<span class="input-group-btn">
<button type="button" class="btn btn-primary" onclick="deleteAnother($(this).parent().parent())">
<i class="fa fa-minus"></i>
</button>
</span>
</td>
}
Quand je soumets la forme qu'elle est gérée par l'action du contrôleur
[HttpPost]
public ActionResult CreateOC(CreateOCVM ocvm)
{ ... do something ....
Le problème est que quand je vérifie les valeurs sur mon modèle toutes les valeurs sont ok, mais pas un pour le datetime (fecha_acceso)
À mon avis le champ caché pour ma propriété date-heure a une valeur sur elle.
Mais le changement de valeur quand je vérifie sur la méthode du contrôleur.
J'ai essayé avec aproaches diférents mais je reçois toujours des données erronées sur ma méthode du contrôleur. Est-ce que quelqu'un sait ce qui se passe? Ou quelqu'un a une approche différente qui peut m'aider à faire la même chose?
Merci.
J'ai essayé ceci et n'ai pas fonctionné, j'ai également essayé de formater le datetime avant de le passer au contrôleur et ai eu le même comportement. – Jose
J'ai également essayé ceci et ai obtenu la valeur nulle – Jose
Avez-vous besoin de moi pour le faire encore et envoyer la capture d'écran? – Jose