我在asp.net mvc中有一些问题。 我将发布整个代码,然后我对其进行解释。
ViewModel。
public class EventFormViewModel
{
[Required]
public string studentId{ get; set; }
[Required]
public string location{ get; set; }
[Required]
public string Date { get; set; }
[Required]
public string Time { get; set; }
// Date and Time == DataTime.
public DateTime GetDateTime()
{
var Datetime = DateTime.Parse(string.Format("{0} {1}", Date, Time));
return Datetime;
}
}
当模型状态无效时,mvc框架-mvc框架称为此操作方法,并使用反射来构造此viewmModel(所有属性仅不是方法。)在这种情况下,GetDateTime()
是方法。
为什么我会收到此例外?
控制器
[Authorize]
[HttpPost]
public ActionResult NewEvent(EventFormViewModel viewModel)
{
if (!ModelState.IsValid)
{
return RedirectToAction("Index","Home");
}
var _event= new _Event
{
studentId = User.Identity.GetUserId(),
DateTime = viewModel.GetDateTime(),
location = viewModel.location
};
_Dbcontext._Events.Add(_event);
_Dbcontext.SaveChanges();
return RedirectToAction("Index","Home");
}
运行代码时。我收到此错误。
问题: 在我的viewModel中标记了所有必填字段。 S0,当我提交空表格时,出现此“字符串未正确识别为有效的DateTime”异常。
答案 0 :(得分:1)
输入内容可以是正确的日期和时间格式,正如您所说,用户可能没有提供。您可以使用TryParse
方法,如果它是有效的日期时间值,它将安全地进行解析。所以你可以写:
DateTime parsedDateTime;
bool isParsed = DateTime.TryParse(string.Format("{0} {1}", Date, Time),out parsedDateTime);
return parsedDateTime;
或alternativley,您需要检查是否同时提供了日期和时间,然后通过检查if
条件来解析它们:
public DateTime GetDateTime()
{
DateTime dateTime = DateTime.MinValue;
if(!String.IsNullOrEmpty(Date) && !String.IsNullOrEmpty(Time))
dateTime= DateTime.Parse(string.Format("{0} {1}", Date, Time));
return dateTime;
}
答案 1 :(得分:1)
尝试一下。我已经对其进行了测试,并且效果很好:
public DateTime GetDateTime()
{
var inputDate = DateTime.ParseExact(this.Date, "dd/MM/yyyy", CultureInfo.InvariantCulture);
var inputTime = TimeSpan.Parse(this.Time);
DateTime datetime = inputDate + inputTime;
return datetime;
}
在上述代码中,请使用您自己的格式(而不是"dd/MM/yyyy"
来从用户界面发送日期)。