2016-09-22 59 views
-1

我想从jQueryUI datepicker绑定选定的日期到要在控制器中使用的模型,但其返回null。我能够检索选定值时的FormCollection使用绑定选定的日期从jqueryui datepicker到型号

视图模型

public class EmpViewModel 
{ 
    public int EmpId { get; set; } 

    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public DateTime DateOfBirth { get; set; } 

} 

查看

<div class="col-md-10"> 
    @Html.EditorFor(model => model.DateOfBirth, 
      new { htmlAttributes = new { @class = "form-control datefield" } }) 
</div> 

控制器

public ActionResult Create(EmpViewModel emp) 
{ 
} 

试过下面的文章中的方法,但couldn”让它工作 http://www.asp.net/mvc/overview/older-versions/using-the-html5-and-jquery-ui-datepicker-popup-calendar-with-aspnet-mvc/using-the-html5-and-jquery-ui-datepicker-popup-calendar-with-aspnet-mvc-part-4

脚本

<script> 
    $(function() { 
     $(".datefield").datepicker(); 
    }) 
</script> 
+0

该教程是五岁什么你的MVC版本?请粘贴您的'EmpViewModel' – naveen

+0

@naveen - MVC 5,包含viewmodel – user3543878

+0

显示您为datepicker连线的jQuery代码。 – Jecoms

回答

0

有到日期选择器绑定到视图模型的多个解决方案,但是这两个都是常见的:

首先,尝试EditorFor声明id属性和jQuery日期选择器绑定到它。

@Html.EditorFor(model => model.DateOfBirth, 
      new { htmlAttributes = new { @id = "DateOfBirth", @class = "form-control datefield" } }) 

<script> 
    $(function() { 
     $("#DateOfBirth").datepicker(); 
    }); 
</script> 

其次,尽量HttpPost属性上的控制器的方法,如果你的模型通过使用表单提交到控制器,并使用ModelState.IsValid必要时。

[HttpPost] 
public ActionResult Create(EmpViewModel emp) 
{ 
    if (ModelState.IsValid) 
    { 
     // do something 
    } 
} 

如果这些解决方案仍然无法工作,改变EditorForTextBoxFor并检查提交的工作方式使用这两种形式收集参数和模型绑定方案。

其他事情关心:

  1. 确保您EditorFor封闭内<form>标签,或尝试@using (Html.BeginForm("Create", "Controller", FormMethod.Post))并把EditorFor里面。

  2. 确保datepicker提供的日期格式格式正确System.DateTime,不要依赖JS格式(避免使用toLocaleDateString,如果有的话)。如果您想使用特定的日期格式,请使用momentjs库。

  3. 确保jQuery已正确加载,在页面加载后检查浏览器控制台是否存在jQuery的存在(请参阅TypeError: jQuery is not defined消息是否存在)。

  4. 尝试将简单DateTime设置为可空DateTimepublic DateTime? DateOfBirth { get; set; }并插入一些代码以检查空值。

类似的问题,进一步参考:

MVC 4 DatePicker's selected value not getting set to model

Bind Datetime Model value to datepicker and pass them to controller method

+0

通过添加ID实现第一个点绑定01/01/0001的错误日期12:00: 00 AM,我该如何“确保datepicker提供的日期格式是以System.DateTime可识别的正确格式”执行此操作? – user3543878

+0

尝试在客户端使用'console.log($(“#DateOfBirth”).val())'或类似的方式来获取'EditorFor'给出的日期时间输出值。您可以在传递给模型时检查控制台输出是否适合作为正确的DateTime格式。 –

+0

使用moment.js(http://momentjs.com/) – garethb