asp.net mvc路由;视图未找到”;

本文关键字:视图 mvc 路由 asp net | 更新日期: 2023-09-27 18:27:46

非常简单的基本问题我只有一条路线:

 routes.MapRoute(
                "Widget", // Route name
                "Widget/Frame/{postUrl}", // URL with parameters
                new { controller = "Widget", action = "Index", postUrl = UrlParameter.Optional } // Parameter defaults
            );

当我尝试打开以下网址时:"http://localhost:50250/Widget/Frame/qwerty"

我有一个错误:

找不到视图"qwerty"或其主视图,或者没有视图引擎支持搜索到的位置。以下地点已搜索:

嗯。。。为什么?

控制器代码:

public class WidgetController : Controller
    {
        //
        // GET: /Widget/
        public ActionResult Index(string postUrl, int? blogEngineType)
        {
            return View(postUrl);
        }


    }

asp.net mvc路由;视图未找到”;

您正在返回带有的视图

return View(postUrl);

由于没有视图的名称(在这个重载中),该方法使用Action名称作为视图名称并查找它

return Redirect(postURL);

我冒着猜测的风险说,这是因为它实际上试图使用Index()的操作名称,因为这是您指定的默认操作。你没有通过url传递{action}参数,那么它还能从哪里获得操作呢?

你能把你的url模式改成Widget/{action}/{postUrl},然后看看它是否有效吗?

或者将action的默认值设置为Frame。基本上,它无法知道您正在寻找Frame操作,因此它失败了。

编辑:我明白你现在在做什么了——动作的名字实际上是索引,对吧?在这种情况下,我不确定,我们需要查看您的控制器代码。我会留下上面的答案,以备不时之需。

编辑2:您正在传递值"qwerty"作为视图名称-您在视图文件夹中有一个名为"qwerity"的视图吗?

如果您希望它是模型,并且视图名称是"Index",那么您应该调用return View((object)postUrl);,这样它就不会混淆。

这是因为您的返回语句是return View(postUrl);,当您将字符串传递给View()方法时,它被解释为要使用的视图的名称。因此,它会寻找一个名为qwerty的视图,因为这就是该变量中的内容。如果您想将postUrl作为一个模型交给Index操作的视图,您必须将返回更改为return View("Index", postUrl)

您确定Views父文件夹中的Shared或Widget文件夹中有一个名为"qwerty"的View吗?否则,您可能需要使用return RedirectToAction(postURL);