2010-11-19 5 views
4

ビューに問題があります。ここでは、コードスニペットです: ASP.NET MVC '名前'ビューまたはそのマスターが見つかりませんでした

public ActionResult AddAdvertisement() 
    { 
     ... 
     return RedirectToAction("AdvCreated"); 
    } 

    [HttpGet] 
    public ActionResult AdvCreated() 
    { 
     return View("AdvCreated", "abc"); 
    } 

はその後、私はエラー

「AdvCreated」またはそのマスターが見つかりませんでしたビューを参照してください。次の場所を検索した:

abc.master

〜/ビュー/広告/ abc.master

〜/ビュー/共有/私はちょうどhttp://localhost/AdvCreatedすべてがあるURLに行けばOK。どうして ?

+0

彼はhttp:// localhost/AddAdvertisementにヒットすると、彼はエラーになります。 – mxmissile

答えて

8

文字列をViewとしてモデルに渡そうとしています。不可能です。このようなビュー機能のオーバーロードがあります:

View(string viewName,string masterViewName) 

だから、マスタービューという名前の「ABC」を探します。文字列を渡す場合は、オブジェクトに変換します。例はhereです。

+0

したがって、Viewに文字列を渡す唯一の方法は、ViewDataに格納することです。 – Tony

+0

いいえ。オブジェクトに変換してから、ビューのToString()メソッドを使用するだけで表示できます。私が掲示した例をチェックするとあなたが表示されます。 –

+0

MVC3(任意のリリース)を使用している場合、ViewModel.MyString = "abc";などのコントローラで.NET 4.0の動的なプロパティViewModelを使用することもできます。これで、View.MyStringを介してビューにアクセスできます。 – gligoran

1

あなたのビュー/ aspx/ascxは、あなたのコントローラのコードのように使用するためにリストアップされたフォルダの1つの中に存在する必要があります。

ちょうどこれを行う場合:

return RedirectToAction("AdvCreated"); 

ASP.NET MVCは、あなたのコントローラーフォルダにあるビュー/ ascxファイル/ ASPXを持っていると仮定します - お使いの場合〜/ビュー/広告/フォルダまたは中を共有フォルダ。あなたは、次の

return View("AdvCreated", (object)"abc"); 

それともあなたがあるかを行う必要があり

return RedirectToAction("~/MyFolder/AdvCreated.ascx"); 
5

:あなたが想定したフォルダの外に表示するための特定のビューを持っている場合は、あなたのような、直接これを指定することができます

.NET 4を使用すると、次のようにすることもできます。

return View("AdvCreated", model: "abc"); 

これは、フレームワークに正しいove rloadthatは、2番目のパラメータをモデルとして扱います。

関連する問題