-1


0

ASP.net MVCおよびADO.netエンティティデータモデルを使用してパーツテーブルを検索すると、オブジェクトのインスタンスに設定されていないエラーオブジェクト参照が表示される

みんなおはよう、

新しいASP.net MVC Webアプリケーションを開発しています。 その機能の一部は、SQL Serverデータベースでパーツ一覧を検索することです。 ソリューションの一部としてADO.netエンティティデータモデルを作成し、PartListという名前を付けました。 マスターページを使用しており、検索コントロールをレンダリングしたい。 そのため、SharedディレクトリにPartsForm.ascxを次のように作成しました。

<%@ Control Language="VB" Inherits="System.Web.Mvc.ViewUserControl(Of      DielToolMVC.PartList)" %>
<%=Html.ValidationSummary("Please correct the errors and try again")%>
<%  Using (Html.BeginForm())%>


Please enter a part description or NSN.
<%=Html.DropDownList("PARTNAME",Model.PARTNAME )%>
<%=Html.DropDownList("NSN", Model.NSN)%>
<%=Html.ValidationMessage("Part Name or NSN", "*")%>





<% End Using%>

また、2つの目的を果たすPartsControllerを作成しました。1)パーツページのパーツリスト全体をレンダリングするためと、2)パーツリストを検索して、PartsForm.ascxに結果を返すためです。 PartsControllerのコードは次のとおりです。

Public Class PartsController
Inherits System.Web.Mvc.Controller

Private _entities As New Diel_inventoryEntities()

'
' GET: /Parts/

Function Index() As ActionResult
    Return View(_entities.PartList.ToList())
End Function

'
' GET: /Parts/Details/5

Function Details(ByVal id As Integer) As ActionResult
    Return View()
End Function

'
' GET: /Parts/Create

Function Create() As ActionResult
    Return View()
End Function

'
' POST: /Parts/Create

 _
Function Create(ByVal collection As FormCollection) As ActionResult
    Try
        ' TODO: Add insert logic here
        Return RedirectToAction("Index")
    Catch
        Return View()
    End Try
End Function

'
' GET: /Parts/Edit/5

Function Edit(ByVal id As Integer) As ActionResult
    Return View()
End Function

'
' POST: /Parts/Edit/5

 _
Function Edit(ByVal id As Integer, ByVal collection As FormCollection) As ActionResult
    Try
        ' TODO: Add update logic here

        Return RedirectToAction("Index")
    Catch
        Return View()
    End Try
End Function
Function Search(ByVal id As String, ByVal SearchType As String) As ActionResult
    If SearchType = "description" Then
        Dim SearchResult = From p In _entities.PartList _
                         Where p.PARTNAME = id _
                         Select p
        Return View(SearchResult)
    End If
    If SearchType = "NSN" Then
        Dim SearchResult = From p In _entities.PartList _
                           Where p.NSN = id _
                           Select p
        Return View(SearchResult)
    End If
    Return View("UnknownType")
End Function
End Class

意図した検索制御機能:入力された検索文字列を受け取り、選択されたドロップダウンリストに応じてPartNameまたはNSNで検索を実行します。 検索結果を別のページに出力したいと思います。 この問題を解決し、目的の機能を作成する方法について、誰かが私に助けとガイダンスを提供できますか?

ありがとう、

Sid

明確化:PartsForm.ascxファイルのObject Reference not Set to Objectのエラーメッセージが表示される理由がわかりません。 ADO.net Entity Data Model(edmxファイル)に加えて、モデル内の各フィールドを定義するクラスを作成する必要がありますか? 私はそのいくつかをチュートリアルで見ましたが、edmxファイルがそれを処理すると考えましたか? このエラーメッセージがスローされているのはなぜですか?

関連コード:

<%@ Control Language="VB" Inherits="System.Web.Mvc.ViewUserControl(Of DielToolMVC.PartList)" %>
<%=Html.ValidationSummary("Please correct the errors and try again")%>
<%  Using (Html.BeginForm("Search", "PartsController"))%>


Please enter a part description or NSN.
<%=Html.TextBox("searchtext") %>
<%=Html.DropDownList("PARTNAME",Model.PARTNAME )%>
<%=Html.DropDownList("NSN", Model.NSN)%>
<%=Html.ValidationMessage("Part Name or NSN", "*")%>





<% End Using%>

PartsControllerのスニペット:

 Function Search(ByVal id As String, ByVal SearchType As String) As ActionResult
    If SearchType = "PARTNAME" Then
        Dim SearchResult = From p In _entities.PartList _
                         Where p.PARTNAME = id _
                         Select p
        Return View(SearchResult)
    End If
    If SearchType = "NSN" Then
        Dim SearchResult = From p In _entities.PartList _
                           Where p.NSN = id _
                           Select p
        Return View(SearchResult)
    End If
    Return View("UnknownType")
End Function
Function Result(ByVal id As String, ByVal SearchResult As String) As ActionResult
    Return View("SearchResult")

End Function

上記のようにPartsControllerとPartsForm.ascxを変更した後、エラーメッセージが引き続き表示されます。

1 Answer


1


まだかなりあいまいですが、ここに私が見ているものがあります。

ページは自分自身に送信しています。 問題ではありませんが、検索コントローラーから戻ったときに、PARTNAMEまたはNSNオブジェクトも返されていません。

それはあなたがあなたの質問からそれを除外したからかもしれません。

そうでない場合は、検索結果、PARTNAME、およびNSNオブジェクトを持つ別のクラスを作成し、それをページに返します。

Model.PARTNAME ectを使用し、製品のModel.Productsなどに使用します。

これが間違っている場合は、より関連性の高いコードまたは失敗したコードの小さな断片を提供してください。

編集

申し訳ありませんが、NSNとPARTNAMEの発言とは異なり、新しいクラスのSearchTypeをビューに戻す必要があります。