1

VS 2012 (C#) で「ASP.NET Dynamic Data Entities Web Application」プロジェクト テンプレートを使用して単純な Web サイトを構築しようとしています。これはほとんど標準的なテンプレート設定であり、DateTime 型プロパティが主キーの一部であるエンティティを使用します (基になるテーブルには、マップされた列に SQL DateTime 型もあります)。詳細ページを表示しようとしたり、行を編集しようとすると、FormatException が発生します。

文字列は有効な DateTime として認識されませんでした。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.FormatException: 文字列が有効な DateTime として認識されませんでした。

ソース エラー:

現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

スタックトレース:

[FormatException: 文字列は有効な DateTime として認識されませんでした。]
System.Web.UI.WebControls.EntityDataSourceView.ExecuteSelect(DataSourceSelectArguments 引数) +965
System.Web.UI.DataSourceView.Select(DataSourceSelectArguments 引数、DataSourceViewSelectCallback コールバック) +21
System. Web.UI.WebControls.DataBoundControl.PerformSelect() +138
System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +30
System.Web.UI.WebControls.FormView.DataBind() +4
System.Web.UI.WebControls .BaseDataBoundControl.EnsureDataBound() +105 System.Web.UI.WebControls.FormView.EnsureDataBound() +178
System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +75 System.Web.UI.Control.EnsureChildControls() +83 System.Web.UI.Control.PreRenderRecursiveInternal() +42
System.Web.UI.Control.PreRenderRecursiveInternal () +168
System.Web.UI.Control.PreRenderRecursiveInternal() +168
System.Web.UI.Control.PreRenderRecursiveInternal() +168
System.Web.UI.Control.PreRenderRecursiveInternal() +168
System.Web.UI.Control .PreRenderRecursiveInternal() +168
System.Web.UI.Control.PreRenderRecursiveInternal() +168
System.Web.UI.Page.ProcessRequestMain(ブール値 includeStagesBeforeAsyncPoint、ブール値 includeStagesAfterAsyncPoint) +974

web.config の node にカルチャを設定しようとしまし<globalization>たが、役に立ちませんでした。詳細ページの URL には、次のようなクエリ文字列の列が含まれています。 2013 16:10:33」および「2013 年 9 月 30 日 23:10:40」を更新。

これは私の最初の動的データ プロジェクトなので、何をすればよいかよくわかりません... よろしくお願いします。

編集:

追加する

<globalization uiCulture="en-US" culture="en-US"/>

メインの web.config の system.web ノードに変更すると、例外が消えましたが、現在、詳細は正しい行を見つけることができず、「そのような項目はありません」と言っています。

4

3 に答える 3

0

私は問題を解決することができました。基になるテーブルに主キーが定義されていないことが判明したため、すべての NOT NULL 列 (2 つの DateTime 列を含む) が、そのテーブルの Entity Framework エンティティのエンティティ キー プロパティを推測しました。これら 2 つのプロパティの「エンティティ キー」プロパティを False に設定すると、すべてが正常に機能し始めました。

これは普遍的な解決策ではありませんが、DateTime 型の列以外の列によって行が一意に識別されるこの特定のケースの回避策です。DateTime 列が主キーになるテーブルが実際にある場合、同じ問題が再び発生すると思います。

FormatException に関して<globalization culture="en-US" />は、web.config で system.web ノードの下に設定することで修正されましたが、DateTime 列から Entity Key プロパティを削除した後でも、URI の構築に DateTime 値が使用されなくなったため、これは不要になりました。

于 2013-10-03T11:58:27.933 に答える
0

ローカリゼーションの問題が発生している可能性があります。日時の形式は国によって異なり、C# と SQL で使用するものも異なる場合があります。

次のような不変形式で送信してみてくださいyyyy-mm-dd

また、代わりにdatetimeoffsetをdatetimeとして使用する必要があります。正確に覚えていれば、精度が高く、同じスペースを使用するか、少なくともdatetime2をSQLデータ型として使用します。これは、精度が高く、スペースが同じか少ないためです。

更新: Adarsh が示唆するように、値の解析に問題がある可能性があります。プログラムでカルチャを変更できます。

// Put the using statements at the beginning of the code module
using System.Threading;
using System.Globalization;
// Put the following code before InitializeComponent()
// Sets the culture to French (France)
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
// Sets the UI culture to French (France)
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");

msdn から取得

それがおそらく問題であるかどうかを確認するためにそれを試すことができます。次に、config から設定するか、datetime の別のモデルバインディングを調べることができます。適切なものに応じていくつかの解決策があります。

于 2013-10-01T11:26:59.170 に答える
0

datetime を主キーとして定義しているため、get リクエストの送信中にブラウザによって URL エンコードされます。この値を使用する前に、ビューでこの値をデコードする必要があります。フレームワークは、エンコードされた値を日時として解析しようとしています。これにより、例外が発生します。

于 2013-10-01T11:28:26.660 に答える