[英]Display View in folder without Controller or Action in ASP.net MVC
如果沒有控制器/動作匹配,我想在文件夾中顯示視圖。
例如www.site.com/Home/Index,如果我有正常的默認路由{controller} / {action} / {id},那么我需要一個帶有Index方法的HomeController。 而且在Views文件夾中有一個名為Home的文件夾,並且文件Index.cshtml
如果我嘗試www.site.com/About/Index,則需要創建AboutController和方法索引。 但是我只有文件夾About和文件Index.cshtml。
如果默認路由不匹配,但我希望在Views文件夾中有一個與模式匹配的Folder和File:{controller}是文件夾{action}是視圖; 然后顯示該視圖。
我怎么能這樣做?
對於缺少的動作,您可以覆蓋HandleUnknownAction 。
對於缺少的控制器,您可以實現一個自定義的DefaultControllerFactory並使用類似以下內容的方法重寫GetControllerInstance:
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) {
if (controllerType == null)
return new DumbController();
return base.GetControllerInstance(requestContext, controllerType);
}
class DumbController : Controller {
protected override void HandleUnknownAction(string actionName) {
try {
View(actionName).ExecuteResult(this.ControllerContext);
} catch (Exception ex) {
throw new HttpException(404, "Not Found", ex);
}
}
}
最近,在開發AJAX Web應用程序時遇到了相同的問題,該應用程序的大多數頁面實際上不需要控制器(所有數據都是通過Web API調用返回的)。
數十個控制器全部通過一個動作返回視圖似乎效率不高,因此我開發了ControllerLess插件,該插件在幕后包含了一個默認的視圖控制器,並且只有一個動作。
如果為視圖創建控制器,則MVC將使用該控制器。 但是,如果您創建的視圖沒有控制器,則該請求將通過默認的插件控制器重新路由。
它可與C#和VB.NET一起使用,我們可從https://www.nuget.org/packages/ControllerLess獲得
源代碼也可以在GitHub上找到, 網址為https://github.com/brentj73/ControllerLess
您不能也不應該以自己想要的方式。 無法通過設計解決視圖問題(在/ views文件夾中的web.config中,存在一個映射為*的HttpNotFoundHandler以確保實現此目的)
話雖這么說,您在這里想要的並不是真正的標准,所以為什么要這樣做,也許我們可以根據其背后的原因提出更好的建議?
從未嘗試過,但這是一個想法。 您可以為路線設置約束,因此應該可以創建與“ {folder} / {file}”匹配的路線,在其中將約束約束為有效值(可以將其谷歌搜索,也可以在SO上搜索),然后進行設置它可以通過一些默認操作在FileController(任意名稱)上運行。 然后,在該操作中,只需返回所需的視圖即可。 就像是:
public class FileController : Controller {
public ActionResult Default(string folder, string file) {
return View(folder + "/" + file);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.