1

私はhomecontroller.cs(MVC Razorプロジェクト内)で忙しく、次のようなクラスをビューに送信します。

    private class Evt 
    {   
        public SEvent Event { get; set; }
        public String Duration { get; set; }
    };

    public ActionResult Index()
    {
        List<SEvent> modFromWcf = proxy.GetAllEventsByPeriod(@System.DateTime.Now.Year, @System.DateTime.Now.Year + 1, "EN").ToList();
        List<Evt> modTosend = new List<Evt>();

        foreach (SEvent item in modFromWcf)
        {
            Evt ES = new Evt();
            ES.Event = item;
            ES.Duration = GetDuration(item.StartDate ,item.EndDate);   
            modTosend.Add(ES);
        };

        return View("Index", modTosend);
    }

SEventは単なる別のクラスです。

私の見解では、いくつかの属性を使用して何かをしようとしていますが、そのクラスEventの値を取得する方法がわかりません。これは私のコードです:

@{ 
    foreach (var item in ViewData.Model) {
    string year = item.Event.StartDate.Year.ToString();
    }
    ....
}

私が受け取るエラーは次のとおりです。「オブジェクト」には「イベント」の定義が含まれていません。しかし、デバッグして、アイテムがクラスEventと文字列Durationで構成されていることを確認できます。中身も見えます。item.Event.StartDataなどを取得する方法を誰かが知っていますか?

4

2 に答える 2

0

itemクラスにキャストする必要があります。

ViewDataはタイプViewDataDictionaryであり、を実装します。これは、タイプのキーをタイプの値にIDictionary<string, Object>一致させる辞書であることを示します。stringobject

これを使用して、コードをそのまま実行します。

@{ 
    foreach (var item in ViewData.Model) {
    string year = ((Evt)item).Event.StartDate.Year.ToString();
    }
    ....
}

ただし、データを押し込むのではなく、強く型付けされたビューを使用する必要がありますViewData

于 2012-05-10T21:30:09.453 に答える
0

アイテムを明示的に定義する必要があります。
ViewData.Modelオブジェクトのコレクションを返します。オブジェクトにはイベントプロパティがありません。

このようなものが機能するはずです:

@{ 
    foreach (var item in ViewData.Model) {
        if (item is Evt){
            Evt itemEvt = (Evt)item;
            string year = itemEvt.Event.StartDate.Year.ToString();
        }
    }
    //...
}

私は通常次のようなことをしますが:

@{ 
    foreach (Evt item in ViewData.Model) {
        string year = item.Event.StartDate.Year.ToString();
    }
    //....
}
于 2012-05-10T21:32:18.677 に答える