2

非常に単純なMVCアプリケーションで、1つのモデル、1つの緩く型付けされたビュー、および List<Model>を介してビューに送信するコントローラーがありますViewBag

モデルを更新するまで、すべて正常に機能していました。'Model'に'PropertyName'の定義が含まれていないことがわかりました。アプリケーションを再構築し、一時フォルダーをクリーンアップしてみました。

これを正しく再コンパイルするには、何をクリーンアップする必要がありますか?

〜編集:見つからないプロパティがモデルに追加されましたが、削除されませんでした。そして、私はこの新しいプロパティをビューで使用しようとしています。

〜編集:モデル:

public class App
{
    public String title { get; set; }
    public String featured { get; set; }
    public String subtitle { get; set; }
    public String thumb { get; set; }
    public String logo { get; set; }
    public String web { get; set; }
    public String email { get; set; }
    public String phone { get; set; }
    public String download { get; set; }
    public String body { get; set; }
    public List<String> tags { get; set; }
    public List<String> features { get; set; }
    public List<Highlight> highlights { get; set; }
}

コントローラ:

ViewBag.apps = (from xml in XmlResources.Root.Descendants("app")
                        select new App
                        {
                            title = xml.Element("title").Value,
                            featured = xml.Attribute("featured").Value,
                            subtitle = xml.Element("subtile").Value,
                            thumb = xml.Element("thumb").Value,
                            logo = xml.Element("logo").Value,
                            web = xml.Element("web").Value,
                            email = xml.Element("email").Value,
                            phone = xml.Element("phone").Value,
                            download = xml.Element("download").Value,
                            body = xml.Element("body").Value,
                            tags = (from x in xml.Descendants("tag") select x.Value).ToList(),
                            features = (from x in xml.Descendants("feature") select x.Value).ToList(),
                            highlights = (from x in xml.Descendants("highlight") select new Highlight { type = x.Attribute("type").Value, src = x.Attribute("src").Value }).ToList()
                        }).ToList();

意見:

@using eduApps.Models;
 @for (var i = 0; i < ViewBag.apps.Count; i++)
 {
  @{ if(!String.IsNullOrEmpty(ViewBag.apps[i].web))
                   {
                        <span>Web:</span><a href="@ViewBag.apps[i].web" title="@ViewBag.apps[i].title">@ViewBag.apps[i].web</a>
                    }
  }
}

エラー:「eduApps.Models.App」に「web」の定義が含まれていません

4

2 に答える 2

3

(ViewBag.apps[i] as eduApps.Models.App)ここでは厳密な型指定がないため、使用するときにクラスにキャストしてみてください。MVCは、定義されたプロパティを実際に含まないViewBag.apps[i]として単純に認識します。objectApp

@{ 
    if(!String.IsNullOrEmpty((ViewBag.apps[i] as App).web))
    {
        <span>Web:</span><a href="@(ViewBag.apps[i] as App).web" title="@(ViewBag.apps[i] as App).title">@(ViewBag.apps[i] as App).web</a>
    }
}

クラス定義がどこにあるのかわからないAppので、適切な名前空間に置き換えるか、ビューの上部にある名前空間にディレクティブをNamespace.追加する必要があります。using

編集using-のビューにが既に追加されていることに気付きましたeduApps.Models。私は私の答えを修正しました。

于 2012-12-03T14:13:34.023 に答える
2

私が理解していないのは、Model の代わりに ViewBag を使用する理由です。

ControllerMethod は次のようになります。

public ActionResult Foo(){

   IList<App> model = 
   (from xml in XmlResources.Root.Descendants("app")
                    select new App
                    {
                        title = xml.Element("title").Value,
                        featured = xml.Attribute("featured").Value,
                        subtitle = xml.Element("subtile").Value,
                        thumb = xml.Element("thumb").Value,
                        logo = xml.Element("logo").Value,
                        web = xml.Element("web").Value,
                        email = xml.Element("email").Value,
                        phone = xml.Element("phone").Value,
                        download = xml.Element("download").Value,
                        body = xml.Element("body").Value,
                        tags = (from x in xml.Descendants("tag") select x.Value).ToList(),
                        features = (from x in xml.Descendants("feature") select x.Value).ToList(),
                        highlights = (from x in xml.Descendants("highlight") select new Highlight { type = x.Attribute("type").Value, src = x.Attribute("src").Value }).ToList()
                    }).ToList();


   return View(model);
}

そして、ビューは次のことを行う必要があります。

 @model IList<App>
 @foreach(App app in Model){
     @{ if(!String.IsNullOrEmpty(app.web))
        {
           <span>Web:</span><a href="@app.web" title="@app.title">@app.web</a>
        }
     }
 }

Hth トビ

于 2012-12-03T14:42:31.443 に答える