根据我在 HTML 表单中的输入(6 或 6.5 - 或者一般来说,整数 VS 浮点数),我得到或没有得到以下异常(它适用于 int,不适用于 float):
传入字典的模型项为空,但此字典需要“System.Boolean”类型的非空模型项。
我的 View 的 ViewModel 为null,并且问题在自定义模板中可见,该模板需要一个 bool 值,但改为 null。我们将 ASP.NET MVC 4 与 .Net 4.0、C# 和 Razor 模板一起使用。
经过几个小时的调试,我得出以下结论:
- Post Form-Data 是相同的(除了一个不同的属性,但看起来仍然正确)
- 执行顺序有些奇怪的不同:
- 对于int,我得到Application_BeginRequest->Filter,它贯穿我的属性->Action->View Rendering OR Redirect(一切正常)
- 对于浮动,我得到 Application_BeginRequest->Filter,它贯穿我的属性->View Rendering-> END WITH AN EXCEPTION 和 Empty ViewModel
我已经检查了几十次-> 如果我通过浮动视图会以某种方式呈现而没有任何要执行的动作(我会看到)(当然断点一直都是相同的)。不幸的是,一旦 View 被渲染,我就再也看不到 StackTrace 中的任何东西了。
我的 View 的 ViewModel 是:
public class JabCommonViewModel
{
public int JAB_ID { get; set; }
[UIHint("Checkbox")]
public bool JAB_gesperrt { get; set; }
[UIHint("Checkbox")]
public bool JAB_Kontrolliert { get; set; }
public int e001 { get; set; }
public string e002 { get; set; }
public int e005 { get; set; }
[UIHint("Checkbox")]
public bool e013 { get; set; }
public bool e014 { get; set; }
public short? e015 { get; set; }
public bool? e149 { get; set; }
public int? e649 { get; set; }
public int? e310 { get; set; }
public int? LastJabe311 { get; set; }
public int jabIdE013 { get; set; }
public int jabIdPrev { get; set; }
public int updCnt { get; set; }
public int checks { get; set; }
public bool calculateInEur { get; set; }
public FormViewModel AktivaPassiva { get; set; }
public FormViewModel GuV1GuV2 { get; set; }
public FormViewModel GuV3 { get; set; }
public ActsFormViewModel ActsForm { get; set; }
public CommonDataViewModel CommonDataForm { get; set; }
public CompanyHeadViewModel CompanyHeadForm { get; set; }
public FacilitiesOverviewModel FacilitiesOverview { get; set; }
}
public class FormViewModel
{
public string ShowAllCaption { get; set; }
public string HideAllCaption { get; set; }
public string CurrentCaption { get; set; }
public string PreviousCaption { get; set; }
public bool HasPreviousData { get; set; }
public IEnumerable<FieldViewModel> Fields { get; set; }
public FormViewModel()
{
Fields = new FieldViewModel[0];
}
}
public class FieldViewModel
{
public string Name { get; set; }
public string Title { get; set; }
public object Value { get; set; }
public bool IsDisabled { get; set; }
public bool IsCollapsible { get; set; }
public bool IsSpecialCase { get; set; } // used currently to expand/collapse groups on second level
public FieldViewModel Previous { get; set; }
public Category DataCategory { get; set; }
public IEnumerable<FieldViewModel> Related { get; set; }
public FieldViewModel()
{
Related = new FieldViewModel[0];
}
public FieldViewModel(string name, string title, object value, bool isDisabled, Category dataCategory = Category.None, bool isCollapsible = true)
{
Name = name;
Title = title;
Value = value;
IsDisabled = isDisabled;
DataCategory = dataCategory;
IsCollapsible = isCollapsible;
Related = new FieldViewModel[0];
}
}
....
后退行动是
public ActionResult Edit(JAB2 jab)
{
ComponentFactory.Logger.Debug("Edit with JAB2");
....
}
public class JAB2 : JAB
{
public int jabIdE013 { get; set; }
public JAB LastJab { get; set; }
public int checks { get; set; }
}
public class JAB : BaseModel
{
public JAB()
{
}
public bool e116 { get; set; }
public bool e117 { get; set; }
public bool e118 { get; set; }
public bool e119 { get; set; }
public bool e120 { get; set; }
public bool e121 { get; set; }
public bool e122 { get; set; }
public bool e123 { get; set; }
public bool e124 { get; set; }
public bool e125 { get; set; }
public short? e126 { get; set; }
... /* 100 more properties */ ...
[LocalizedDisplayName("e751", NameResourceType = typeof(Resources.ModelPropertyNames))]
public float? e751 { get; set; } /* the property which works as int but not as float */
}
回发实际上是链接
/JAB/编辑/
当 e751(特殊属性)具有整数值时,仍然会执行正确的方法 get。我们还在该字段上使用autoNumeric-JavaScript 插件。我们也将插件与其他字段一起使用,但到目前为止仅发现此错误。同样,我们有一个无法重现错误的工作站,因此它发生在 3 个工作站中的 2 个 + 测试服务器上。
到目前为止,我没有发现任何东西可以解释它有时会起作用的事实。
非常感谢您花时间阅读我的帖子。
你有什么想法可能是错的或者我可以检查什么?