2009-08-25 28 views
4

私は最初のASP.NET MVCアプリケーションを開発中で、奇妙な問題があります。強く使用に関してのすべてのチュートリアルはViewDataを/ Modelオブジェクトの/はevalをキャストする必要が、私はViewDataを対象にASP.NET MVC ViewData.Modelはキャストが必要です

のViewDataクラスをキャストしていない場合、私はコンパイルエラーを取得しないのViewDataを入力:

public class CategoryEditViewData 
{ 
    public Category category { get; set; } 
} 

コントローラのアクション:

public ActionResult Edit(int id) 
{ 
    Category category = Category.findOneById(id); 
    CategoryEditViewData ViewData = new CategoryEditViewData(); 
    ViewData.category = category; 
    return View("Edit", ViewData); 
} 

作品:

<%=Html.TextBox("name", 
       ((Project.Controllers.CategoryEditViewData)Model).category.Name)) %> 

は動作しません。

<%=Html.TextBox("name", Model.category.Name)) %> 

私が間違っていることがありますか、または常にビューのオブジェクトにキャストする必要がありますか?

+0

ません上記のコードは動作するはずです。それはまさに私がそれをする方法であり、決して問題はありません。見られるコードがもうありますか、それとも本当に簡単なのでしょうか? – griegs

答えて

4

まず、CategoryEditViewDataクラスをコントローラの名前空間からモデルの名前空間に移動する必要があります。 Modelsフォルダの下に新しいクラスを作成して、その外観を確認します。モデルフォルダの下にモデルを置くことをお勧めします。

その後、あなたのコントロールディレクティブは次のようになります。

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Models.CategoryEditViewData >" %> 
+0

+1かなり良いアイデア – griegs

0

待ち時間、ちょっと考えました。あなたの意見では、あなたはモデルを継承していますか?

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<namespace.Controllers.YourFormViewModel>" %> 
+0

Iは 継承= "System.Web.Mvc.ViewUserControl " 今AEを受け取る追加:CS0115: 'ASP.views_category_edit_aspx.GetTypeHashCode()': コンパイルをオーバーライドすることが見出されない適切な方法をエラー 私のCategoryEditViewDataクラスにGetTypeHashCode()を提供する必要があります – Rockett

+0

申し訳ありませんが、名前空間に入力しましたか、コントローラの名前空間を使用しましたか?たとえば、上のコードのようにProject.Controllers.CategoryEditViewDataを使用する必要があります。ごめんなさい。 – griegs

+0

いいえ正しい名前空間に入力しました。それはまだ動作していない奇妙な。 – Rockett

関連する問題