我正在处理一个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属性的隐藏字段具有值。
但是当我在控制器方法上检查它时,值会发生变化。
我试过不同的aproaches但我总是在我的控制器方法上得到错误的数据。有人知道发生了什么吗?或者有一个不同的方法可以帮助我做同样的事情吗?
感谢。
答案 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。我知道这是一种解决方法,而不是正确的解决方案,但缺乏时间迫使我这样做。