找不到ASP.NET视图

Joh*_* L. 6 c# asp.net asp.net-mvc razor asp.net-web-api

我在Visual Studio中创建了一个Web API项目。我正在使用属性路由。这是Controllers文件夹下的控制器:

public class RegistrationController : Controller
{
    // GET: Registration
    [Route("")]
    public ActionResult CreateUser(string platform)
    {

         return View("~/Views/Registration/CreateUser.cshtml", platform);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我CreateUser通过URL 调用操作时,http://localhost/application它可以工作,但是当我尝试通过URL传递查询字符串参数时http://localhost/application?platform=android,则会出现以下错误:

找不到视图“〜/ Views / Registration / CreateUser.cshtml”或其主视图,或者没有视图引擎支持搜索到的位置。搜索了以下位置:

〜/ Views / Registration / CreateUser.cshtml

〜/ Views / Registration / android.master

〜/ Views / Shared / android.master

〜/ Views / Registration / android.cshtml

〜/ Views / Registration / android.vbhtml

〜/ Views / Shared / android.cshtml

〜/ Views / Shared / android.vbhtml

我不明白为什么它在那里时找不到视图,或者为什么它甚至试图用查询字符串参数的名称来找到视图。

Nko*_*osi 7

它可能可以找到视图。它是找不到的母版页。

那是因为您正在使用

class Controller : ... {
    ViewResult View(string viewName, string masterName);
}
Run Code Online (Sandbox Code Playgroud)

重载方法

使用视图名称母版页名称创建System.Web.Mvc.ViewResult对象,该名称将视图呈现给响应。

提示是在搜索视图中包含参数值。因为您传递的platform参数是一个字符串,所以它将调用的方法与使用string viewNameand string masterName参数的方法相匹配。

ControllerViewResult View()方法有很多过载。在这种情况下,您可能希望将platformas作为对象模型传递。您可以通过使用命名参数来解决此问题,这可以通过让编译器知道要调用的重载方法来避免混淆。

public class RegistrationController : Controller {
    // GET: Registration
    [Route("")]
    public ActionResult CreateUser(string platform) {
         return View("~/Views/Registration/CreateUser.cshtml", model: platform);
    }
}
Run Code Online (Sandbox Code Playgroud)

从那里一切都应该按预期工作