Asp.net mvc ASP.NET MVC视图';名称';或者它的主人没有找到

Asp.net mvc ASP.NET MVC视图';名称';或者它的主人没有找到,asp.net-mvc,Asp.net Mvc,我对视图有问题。下面是代码片段: public ActionResult AddAdvertisement() { ... return RedirectToAction("AdvCreated"); } [HttpGet] public ActionResult AdvCreated() { return View("AdvCreated", "abc"); } 然后我看到了错误 未找到

我对视图有问题。下面是代码片段:

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

    [HttpGet]
    public ActionResult AdvCreated()
    {
        return View("AdvCreated", "abc");
    }
然后我看到了错误

未找到视图“AdvCreated”或其主视图。搜索了以下位置:

~/Views/advision/abc.master

~/Views/Shared/abc.master


如果我只是去网址一切都是好的。为什么?

据我所知,您试图传递一个字符串作为模型查看。这是不可能的。视图函数重载如下:

View(string viewName,string masterViewName)

因此,它将查找名为“abc”的主视图。如果要传递字符串,请将其转换为对象。下面是一个示例。

您的视图/aspx/ascx需要位于列出的要使用的文件夹中,例如控制器中的代码

如果您只是这样做:

return RedirectToAction("AdvCreated");
ASP.NET MVC将假定您的控制器文件夹中有一个view/ascx/aspx,在您的情况下是~/Views/advision/文件夹或共享文件夹

如果要在假定文件夹之外显示特定视图,可以直接指定,例如:

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

您需要执行以下操作

return View("AdvCreated", (object)"abc");
或者,如果您使用的是.NET 4,您甚至可以执行以下操作:

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

这迫使框架使用正确的重载,将第二个参数视为模型。

他说,如果他点击了,他就会得到错误。因此,将字符串传递给视图的唯一方法是将其存储在ViewData中?不。您可以将其转换为对象,然后在视图中仅使用ToString()方法显示它。查看我发布的示例,您将看到。如果您使用MVC3(任何版本),也可以在控制器中使用.NET 4.0 dynamic Property ViewModel,如ViewModel.MyString=“abc”;。然后,您可以通过view.MyString在视图中访问它。