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);
}
}
您正在返回带有的视图
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);