0

C# と SQL Server 2005 を使用して ASP .Net MVC 3 アプリケーションを開発しています。

Entity Framework と Code First Method も使用しています。

DropDownList を含む「アプリケーション」ビューがあります。

DropDownList は、ベースのテーブル Genre から項目をロードします。

モデルで既に定義されているリストを使用して、値のテーブルを表示したいと思います。

テーブルの値は、DropDownList の値によって異なります。私はいつもこのエラーがあります:

オブジェクト参照がオブジェクト インスタンスに設定されていません。

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

これは私の見解のコードです:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication2.Models.FlowViewModel>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Application
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>Application</h2>
    <form id="form1" runat="server">

<h2><%= Html.Encode(ViewData["Message"]) %> </h2>
   <div>         
         <%:Html.Label("Type :")%><%: Html.DropDownListFor(model => model.SelectedGenre, Model.GenreItems)%>

   </div>

   <table border = "transparent">
    <tr>
        <th>

        </th>

        </tr>

        <% foreach (var item in Model.FaItems) { %>
    <tr>
         <td>
            <%: Html.DisplayFor(modelItem => item.Nom_Famille) %> 
        </td>


    </tr>
    <% } %>
    </table>
</form>
</asp:Content>

これはコントローラーです:

[HttpGet]
        public ActionResult Application(Genre genre)
        {
        var vv = new FlowViewModel();

        vv.GenreItems = new SelectList(db.Genres.ToList(), "ID_G", "ID_G");


        if (vv.SelectedGenre == "Famille")
        {

            vv.FaItems = db.Familles.ToList();


        }
        else if (vv.SelectedGenre == "Sous Famille")
        {
            vv.SFItems = db.Sous_Familles.ToList();

        }
        return View(vv);

    }

そして最後に、これはモデル 'FlowViewModel' です:

public class FlowViewModel
    {

        [Key]
        public string IDv { get; set; }

        public List<Famille> FaItems { get; set; }
        public List<Sous_Famille> SFItems { get; set; }
        [NotMapped]
        public SelectList GenreItems { get; set; }
        public string SelectedGenre { get; set; } 
}

スタックトレース :

ここに画像の説明を入力

4

2 に答える 2

1

これは、ダックタイプのチェックの必要性を取り除く代替手段です。

public class FlowViewModel
{

    [Key]
    public string IDv { get; set; }

    public List<Famille> FaItems { get; set; }
    public List<Sous_Famille> SFItems { get; set; }
    [NotMapped]
    public SelectList GenreItems { get; set; }
    public string SelectedGenre { get; set; } 

    public FlowViewModel()
    {
        FaItems = new List<Famille>();
        SFItems = new List<Sous_Famille>();
    }
}
于 2013-05-23T23:37:18.817 に答える