2010-11-19 33 views
4

我有一個視圖的問題。下面的代碼片段:ASP.NET MVC未找到視圖「名稱」或其主人

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

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

然後我看到錯誤

「AdvCreated」或它的主人未找到視圖。以下地點搜索:

〜/查看/廣告/ abc.master

〜/查看/共享/ abc.master

如果我只是去URL http://localhost/AdvCreated一切好。爲什麼?

+0

他說如果他點擊http:// localhost/AddAdvertisement,他會得到錯誤。 – mxmissile 2010-11-19 15:40:53

回答

8

我的理解是你正在嘗試傳遞一個字符串作爲模型的視圖。這是不可能的。 View功能有這樣的過載:

View(string viewName,string masterViewName) 

所以它尋找一個名爲「abc」的Master View。如果要傳遞字符串,請將其轉換爲對象。有一個示例here

+0

因此,將字符串傳遞給View的唯一方法是將其存儲在ViewData中? – Tony 2010-11-19 15:52:59

+0

不可以。您可以將其轉換爲對象,然後在View中使用ToString()方法顯示它。檢查我發佈的例子,你會看到。 – 2010-11-19 15:55:07

+0

如果您使用的是MVC3(任何版本),您還可以在ViewModel.MyString =「abc」;等控制器中使用.NET 4.0動態Propery ViewModel。然後你可以通過View.MyString在視圖中訪問它。 – gligoran 2010-11-19 16:43:54

1

您的視圖/ aspx/ascx需要位於列出的其中一個文件夾內,例如控制器中的代碼。

如果你只是這樣做:

return RedirectToAction("AdvCreated"); 

ASP.NET MVC會假設你有設在你的控制器文件夾視圖/ ASCX/ASPX - 你的情況〜/查看/廣告/文件夾或共享文件夾。

如果你有一個特定的視圖來顯示假設的文件夾外,你可以直接指定,如:

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

你需要做以下

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

或者如果你是使用.NET 4你甚至可以這樣做:

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

這迫使框架使用正確的ove rloadthat將第二個參數作爲模型。

相關問題