发布datetime时,Controller接收null

时间:2016-07-05 11:27:47

标签: c# jquery asp.net asp.net-mvc asp.net-core-1.0

情况:我有一个应用程序,我只想做一些CRUD操作。例如,我有一个软件类,其中包含Id,Name和End of Life(EOL)日期。

当我想更新软件产品时,End of Life Property不会更新。它始终为空。我读过我应该为日期尝试一个自定义模型活页夹,但我无法使它工作。我使用jQuery UI datepicker,我不确定我做错了什么。我尝试了不同的格式(dd.MM.yyyy,dd / MM / yyyy,...),但它们都没有奏效。我还尝试在我的web.config文件中添加它(没有成功):

<system.web>
    <globalization
       fileEncoding="utf-8"
       requestEncoding="utf-8"
       responseEncoding="utf-8"
       culture="de-DE"
       uiCulture="de-DE"
    />
</system.web>

这是我的代码:

Sofware.cs:

public class Software {
    [Key]
    public int Id { get; set; }

    [StringLength(200)]
    [Required]
    public string Name { get; set; }

    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "dd.MM.yyyy", ApplyFormatInEditMode = true)]
    public DateTime? EndOfLife { get; set; }
}

SoftwareController.cs:

// ...
[HttpPost]
public IActionResult Edit(Software software)
{
    if (ModelState.IsValid)
    {
        //....
    }
}
// ...

Edit.cshtml

// ...
  <tr>
     <td>
        <label for="EndOfLife">End of Life</label>
      </td>
      <td>
      <input type="datetime" id="EndOfLife" value="@software.EndOfLife" class="form-control datepicker">
       </td>
   </tr>
// ...

site.js

$(function() {
  $(".datepicker").datepicker({ dateFormat: "dd/mm/yy", showWeek: true, firstDay: 1 });
});

2 个答案:

答案 0 :(得分:0)

您获得null的原因是您使用HTML5输入类型 应该显示自己的日期选择器的日期或日期时间。但是,当您使用jquery日期选择器选择日期时,此值不会与其余数据一起回发。我还没有意识到问题的根源,但肯定存在。

你可以使用这样的HtmlHelper:

@Html.TextBox("ReleaseDate", String.Format("{0:d}", DateTime.Now), new { @type = "date", @class = "datepicker" }) 

希望这会有所帮助......

答案 1 :(得分:0)

我搞砸了绑定。我以为它会使用id而不是名称。在我的.cshtml文件中添加name-attribute后,一切都按预期工作。