0

私は現在、C# と aspx で書かれた非常に古い .NET アプリケーションと一緒に、クライアントのリンプを助けようとしています。.NET と C# は、私が通常使用する主要、2、3 番目のテクノロジではないため、それらに関する知識はかなり限られています。

大きな問題は、アプリケーションの C# 側のソース コードがなく、表示または編集できるのは aspx ファイルだけであることです。

次のエラーが表示されるページがあります。

シーケンスに一致する要素が複数含まれています

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

例外の詳細: System.InvalidOperationException: シーケンスに複数の一致する要素が含まれています

ソース エラー:

Line 54:                            <asp:DataList ID="dlChoice" runat="server" DataSource='<%# GetChoices(Convert.ToInt32(Eval("QuestionId"))) %>' RepeatColumns="3" RepeatDirection="Horizontal" RepeatLayout="Table" EnableViewState="false">
Line 55:                                <ItemTemplate>
Line 56:                                    <span id='s<%# Eval("ChoiceId") %>' class='<%# GetChoiceStyle(Convert.ToInt32(Eval("ChoiceId"))) %>'><%# GetTextBoxes(Convert.ToInt32(Eval("QuestionId")), Convert.ToInt32(Eval("ChoiceId")),Convert.ToString(Eval("Points"))) %> <%# ReplaceToken(Eval("ChoiceText").ToString()) %></span>
Line 57:                                </ItemTemplate>
Line 58:                            </asp:DataList>     

ソース ファイル: e:\inetpub\webapp\ScoringSheet.aspx 行: 56

スタックトレース:

[InvalidOperationException: Sequence contains more than one matching element]
   System.Linq.Enumerable.SingleOrDefault(IEnumerable`1 source, Func`2 predicate) +1304639
   lambda_method(ExecutionScope ) +97
   System.Linq.EnumerableExecutor`1.Execute() +244
   System.Linq.EnumerableQuery`1.System.Linq.IQueryProvider.Execute(Expression expression) +154
   System.Linq.Queryable.SingleOrDefault(IQueryable`1 source, Expression`1 predicate) +422
   CPAT.ScoringSheet.GetChoiceStyle(Int32 choiceId) +298
   ASP.scoringsheet_aspx.__DataBind__control11(Object sender, EventArgs e) in e:\inetpub\webapp\ScoringSheet.aspx:56
   System.Web.UI.Control.OnDataBinding(EventArgs e) +132
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +170
   System.Web.UI.Control.DataBindChildren() +11045679
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +182
   System.Web.UI.WebControls.DataList.CreateItem(Int32 itemIndex, ListItemType itemType, Boolean dataBind, Object dataItem) +175
   System.Web.UI.WebControls.DataList.CreateControlHierarchy(Boolean useDataSource) +734
   System.Web.UI.WebControls.BaseDataList.OnDataBinding(EventArgs e) +89
   System.Web.UI.Control.DataBindChildren() +11045679
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +182
   System.Web.UI.WebControls.Repeater.CreateControlHierarchy(Boolean useDataSource) +674
   System.Web.UI.WebControls.Repeater.OnDataBinding(EventArgs e) +68
   System.Web.UI.Control.DataBindChildren() +11045679
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +182
   System.Web.UI.WebControls.ListView.CreateItemsWithoutGroups(ListViewPagedDataSource dataSource, Boolean dataBinding, InsertItemPosition insertPosition, ArrayList keyArray) +924
   System.Web.UI.WebControls.ListView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) +838
   System.Web.UI.WebControls.ListView.PerformDataBinding(IEnumerable data) +46
   System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +147
   System.Web.UI.WebControls.DataBoundControl.PerformSelect() +261
   System.Web.UI.WebControls.ListView.PerformSelect() +74
   CPAT.ScoringSheet.Page_Load(Object sender, EventArgs e) +3500
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +42
   System.Web.UI.Control.OnLoad(EventArgs e) +132
   System.Web.UI.Control.LoadRecursive() +66
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2428

バージョン情報: Microsoft .NET Framework バージョン:2.0.50727.5420; ASP.NET バージョン:2.0.50727.5420

私の質問:問題のあるタグが配置されている場所に素敵な小さなエラー メッセージを表示し、ページの残りの部分をレンダリングできるようにするために、十分なエラー処理を追加するにはどうすればよいですか? これにより、データ セットのどの部分に問題があるかを正確に確認できます。データベースに問題があると思われます (重複レコード、不良データなど) が、実行中のクエリが見つからないか、ページを分割しているデータがわかりません。

さまざまな try / catch ブロックを追加しようとしましたが、これらのデータ バインドが何らかの形で個別に実行され、追加した try / catch が無視され、ページがまだエラーになっていると思われます。

4

1 に答える 1

1

問題はメソッド内でCPAT.ScoringSheet.GetChoiceStyle(Int32 choiceId) 発生しているようです具体的には、指定された入力に複数の要素がある場合に失敗する linq クエリに SingleOrDefault 呼び出しがあるようです。

これが有効な条件でない場合は、データを確認して修正します。それ以外の場合は、上記のメソッド内のコードを変更して、より多くの要素を許可する必要があります。

于 2013-10-31T03:18:35.527 に答える