如果使用查询字符串,MVC 不会呈现视图

MVC does not render view if querystring is used

我有一个 ASP.NET MVC 网站。我遇到的问题是,如果我添加查询字符串,它无法呈现视图

我的控制器是

public class UpgradeController : Controller
{
    public ActionResult Index(string id)
    {
        return View(id);
    }
}

就这么简单

如果我导航到

localhost:123456/upgrade/index

然后 view 按预期在浏览器中呈现。

正如您在 controller 中看到的那样,view Index 接受一个名为 id.

的字符串参数

这应该意味着以下 URL 将 return 相同的视图

localhost:123456/upgrade/index/abc

遗憾的是,它没有呈现预期的 view。相反,我看到

The view 'abc' or its master was not found or no view engine supports the searched locations. The following locations were searched:

以下同理URL

http://localhost:53081/upgrade/index?id=abc

我只有1条路线

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

我完全不明白为什么它会尝试渲染视图并将其视为参数

尝试从此行中删除 id arg

    return View(id)

并使用不同的方法将其传递给视图(如果您甚至需要它)。见 https://www.c-sharpcorner.com/UploadFile/abhikumarvatsa/various-ways-to-pass-data-from-controller-to-view-in-mvc/

将字符串值传递给 View 方法显然是出于不同的目的:没有它,视图文件的名称隐含在操作方法的名称中,而有了它,您可以灵活地加载您想要的任何视图想要。

这是我实际做的

public ActionResult Index(string id)
{
    return View(model:id);
}