2012-04-13 16 views
0

私はasp.net MVC 3を使用しています。チェックボックスヘルパー:奇妙な文字列からブールへの変換エラー

私はチェックボックスヘルパーで奇妙なエラーが発生しています。

@Html.CheckBox("rememberPassword", Model.RememberPassword, new { tabindex = "4", style = "width:15px" }) 

(私はモデルのコンストラクタでtrueに設定)モデルのプロパティ:

public bool RememberPassword { get; set; } 

そして、記録されたエラー:

2012-04-13 01:20:33.334 [13 ] Error - Reference: 0413-012033-334 - Global site error, page: /es/login 
System.InvalidOperationException: The parameter conversion from type 'System.String' to type 'System.Boolean' failed. See the inner exception for more information. ---> System.FormatException: -1' is not a valid value for Boolean. ---> System.FormatException: String was not recognized as a valid Boolean. 
    at System.Boolean.Parse(String value) 
    at System.ComponentModel.BooleanConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value) 
    --- End of inner exception stack trace --- 
    at System.ComponentModel.BooleanConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value) 
    at System.Web.Mvc.ValueProviderResult.ConvertSimpleType(CultureInfo culture, Object value, Type destinationType) 
    --- End of inner exception stack trace --- 
    at System.Web.Mvc.ValueProviderResult.ConvertSimpleType(CultureInfo culture, Object value, Type destinationType) 
    at System.Web.Mvc.ValueProviderResult.UnwrapPossibleArrayType(CultureInfo culture, Object value, Type destinationType) 
    at System.Web.Mvc.ValueProviderResult.ConvertTo(Type type, CultureInfo culture) 
    at System.Web.Mvc.HtmlHelper.GetModelStateValue(String key, Type destinationType) 
    at System.Web.Mvc.Html.InputExtensions.InputHelper(HtmlHelper htmlHelper, InputType inputType, ModelMetadata metadata, String name, Object value, Boolean useViewData, Boolean isChecked, Boolean setId, Boolean isExplicitValue, IDictionary`2 htmlAttributes) 
    at System.Web.Mvc.Html.InputExtensions.CheckBoxHelper(HtmlHelper htmlHelper, ModelMetadata metadata, String name, Nullable`1 isChecked, IDictionary`2 htmlAttributes) 
    at System.Web.Mvc.Html.InputExtensions.CheckBox(HtmlHelper htmlHelper, String name, Boolean isChecked, Object htmlAttributes) 
    at ASP._Page_Views_Login_Index_cshtml.Execute() in d:\[...]\Views\Login\Index.cshtml:line 49 
    at System.Web.WebPages.WebPageBase.ExecutePageHierarchy() 
    at System.Web.Mvc.WebViewPage.ExecutePageHierarchy() 
    at System.Web.WebPages.StartPage.RunPage() 
    at System.Web.WebPages.StartPage.ExecutePageHierarchy() 
    at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) 
    at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) 
    at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) 
    at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) 
    at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) 
    at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<>c__DisplayClass1e.<InvokeActionResultWithFilters>b__1b() 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) 
ここ

はかみそりのコードです

なぜこのようなことが起こっていますか?

注:

それはオダーとオダーなって続けています。魔法のように、エラーが表示され始めたのは(何らかの更新やリリースがないプロダクションサイトで)、それは止まっていません。エラーのない3日間でした。しかし、私はまだそれがなぜであるか知りたいです。

答えて

1

にchkHtmlAttributesを定義します。いくつかの非常に奇妙なシナリオ(私は忘れてしまった)では、このフォームはこのパラメータなしで(他のサイトから)提出することができます。この場合、boolフィールドは文字列 "-1"から取得しようとしていました。

この問題(that I have discovered to be a good practice)を解決する1つの方法は、モデル内の "not-nullable"フィールドを避けることです。

0

ただ、この代わりに

Html.CheckBoxFor(model => model.RememberPassword , chkHtmlAttributes) 

を試してみて、それがチェックボックスを作成する方法とは何の関係もなかったこれらの

tabindex = "4", style = "width:15px" 
+0

私は試してみることができます。私は自分自身でエラーを再現することができるので、これが1日か2日働くかどうかは分かりません。ログで時々見つけました。 **しかし**:両方の方法が(同じヘルパーであっても)同じ方法で動作してはいけませんか? – Diego

+0

また、私が本当に欲しいのは、なぜこれが起こっているのかを理解することです。 – Diego

+0

Model.RememberPasswordがビューに持つ値をデバッグして参照できますか。 – TRR

関連する問題