检索DateTime对象时,ActionResult上的异常

时间:2019-04-18 10:52:49

标签: asp.net-mvc datetime google-calendar-api

我正在asp.net mvc中做一个项目,该项目将连接到Google Calendar API。在视图中,我有一个带有多个输入的表单,这些表单将创建一个Event对象。但是,按下提交按钮时,会出现以下异常:

The parameters dictionary contains a null entry for parameter 'eve_start_date' of 
non-nullable type 'System.DateTime' from method 'System.Web.Mvc.ActionResult Page(...)'

但是我正在填写eve_start_date输入,但我不知道为什么会出现异常

这是我的表格:

<form method="post">
    Titulo:<input type="text" id="eve_title" />
    <br />
    Descripción:<input type="text" id="eve_desc" />
    <br />
    Fecha Inicio:<input type="datetime-local" id="eve_start_date" />
    <br />
    Fecha Fin:<input type="datetime-local" id="eve_end_date" />
    <br />
...
   <input type="submit" title="Submit" />
</form>

这是Post方法

[HttpPost]
public ActionResult Page(String eve_title, String eve_desc, DateTime eve_start_date, DateTime eve_end_date, ...)
    {
    Event newEvent = new Event();
    newEvent.Summary = eve_title;
    newEvent.Description = eve_desc;
    // Converting datetime to eventdatetime
    newEvent.Start = Calendar_Methods.ToEventDateTime(eve_start_date);
    newEvent.End = Calendar_Methods.ToEventDateTime(eve_end_date);
    ...
    return View();
}

,但是由于异常,该方法甚至无法启动,而且我不确定该如何解决。我尝试添加?在paramers类型DateTime? eve_start_date之后,但是出现一个错误,提示我无法将System.DateTime?转换为System.DateTime,所以我不知道这一点,但是有一个DateTime有时为空,那么如何指示该字段为空?

1 个答案:

答案 0 :(得分:0)

您需要在表单中使用name而不是id,并以<input type="datetime-local" name="eve_start_date" />这样的形式为所有输入标签添加名称

<form method="post">
    Titulo:<input type="text" id="eve_title" />
    <br />
    Descripción:<input type="text" name="eve_desc" />
    <br />
    Fecha Inicio:<input type="datetime-local" name="eve_start_date" />
    <br />
    Fecha Fin:<input type="datetime-local" name="eve_end_date" />
    <br />
...
   <input type="submit" title="Submit" />
</form>

更新:将参数从DateTime eve_start_date更改为DateTime? eve_start_date并检查null

if (eve_start_date != null) {
     newEvent.Start = Calendar_Methods.ToEventDateTime(eve_start_date.Value);
}