在Html.EditorFor()中传递TimeSpan

时间:2012-11-14 17:34:00

标签: asp.net-mvc asp.net-mvc-3

我有一个非常奇怪的例外 我有一个带有TimeSpan属性的模型,并尝试创建一个视图。

public class Clock {

    [DataType(DataType.Time)]
    [DisplayFormat(DataFormatString = @"{0:hh\:mm}", ApplyFormatInEditMode = true)]
    public TimeSpan Time {get;set;}
}

@Html.EditorFor(model => model.Time)

这就是我得到的

[InvalidOperationException: The model item passed into the dictionary is of type 'System.TimeSpan', but this dictionary requires a model item of type 'System.String'.]
System.Web.Mvc.ViewDataDictionary`1.SetModel(Object value) +321071
System.Web.Mvc.ViewDataDictionary..ctor(ViewDataDictionary dictionary) +377
System.Web.Mvc.WebViewPage`1.SetViewData(ViewDataDictionary viewData) +48

我在另一个项目中使用过这种技术并且它可以工作,但是在我当前的项目中它失败了,我不知道我的。也许我错过了某些东西或某些东西被禁用了。

2 个答案:

答案 0 :(得分:1)

使用@Html.EditorFor()时,MVC首先查看是否可以使用默认约定(或您在自定义ViewEngine中定义的约定)找到模板。

如果找不到 - 而在您的情况下,您没有定义 - 那么它使用内置模板。在TimeSpan的情况下,它尝试使用String类型的模板,这导致您看到的异常。

您需要明确定义TimeSpan.cshtml模板,并使用@model TimeSpan键入。

答案 1 :(得分:0)

我的答案不是作为一种解决方法的答案,因为我不确定异常的原因,但对我而言,如果我从TFS进行干净的结账,它就有效。