带有Html.hidden的Boostrap Datetimepicker,不在控制器操作中绑定值

时间:2016-12-20 09:31:34

标签: c# asp.net-mvc datetimepicker

我正在处理一个mvc问题,我发现自己陷入了试图将datetimepicker数据绑定到我的控制器操作的问题。我有一个视图,当用户执行某些操作时,添加部分视图集合的部分视图。

我的模型看起来像

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;

在我看来,我有

@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>

当用户执行某项操作时,我会向ICOllection restringidas添加一个新项目。通过对控制器方法进行ajax调用,如下所示:

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'))
        });
    });
}

此调用控制器方法返回将添加到主视图的局部视图。

        [HttpGet]
    public ActionResult AddOCRestriccion(Int32 id)
    {
        PersonaMin item = new PersonaMin();
        item.Id = id;
        persona p = PersonaCollection.getPersonasById(id);
        return PartialView("AddOCRestriccion", item);
    }

编辑: 该控制器返回部分视图以添加到主视图中。

<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>

}

当我提交表单时,它由控制器操作

处理
        [HttpPost]
    public ActionResult CreateOC(CreateOCVM ocvm)
    { ... do something ....

问题是,当我检查模型上的值时,所有值都可以,但不是日期时间的值(fecha_acceso)

在我看来,我的datetime属性的隐藏字段具有值。

enter image description here

但是当我在控制器方法上检查它时,值会发生变化。

enter image description here

我试过不同的aproaches但我总是在我的控制器方法上得到错误的数据。有人知道发生了什么吗?或者有一个不同的方法可以帮助我做同样的事情吗?

感谢。

2 个答案:

答案 0 :(得分:0)

默认情况下,控制器不允许日期格式为dd-mm-yyyy。 在web.config文件中添加以下行来执行此操作

<configuration>
    <system.web>
        <globalization culture="en-GB" />
    </system.web>
</configuration>

答案 1 :(得分:0)

看起来我的Html.BeginCollectionItem助手与DateTime有问题所以我将我的viewmodel的类型从datetime更改为string。我知道这是一种解决方法,而不是正确的解决方案,但缺乏时间迫使我这样做。