我在Visual Studio中创建了一个Web API项目。我正在使用属性路由。这是Controllers文件夹下的控制器:
public class RegistrationController : Controller
{
// GET: Registration
[Route("")]
public ActionResult CreateUser(string platform)
{
return View("~/Views/Registration/CreateUser.cshtml", platform);
}
}
当我通过网址CreateUser
调用http://localhost/application
操作时,它可以正常工作,但当我尝试通过网址http://localhost/application?platform=android
传递查询字符串参数时,会出现以下错误:
视图'〜/ Views / Registration / CreateUser.cshtml'或者找不到它的主人,或者没有视图引擎支持搜索到的位置。该 搜索了以下位置:
〜/查看/注册/ CreateUser.cshtml
〜/查看/注册/ android.master
〜/查看/共享/ android.master
〜/查看/注册/ android.cshtml
〜/查看/注册/ android.vbhtml
〜/查看/共享/ android.cshtml
〜/查看/共享/ android.vbhtml
我无法理解为什么它在那里找不到它或为什么它甚至试图找到一个带有查询字符串参数名称的视图。
答案 0 :(得分:4)
它可能会找到视图。它是无法找到的主页面。
那是因为你正在使用
class Controller : ... {
ViewResult View(string viewName, string masterName);
}
重载方法,其中
使用视图名称创建System.Web.Mvc.ViewResult对象, 用于呈现响应视图的母版页名称。
线索是它在搜索视图时包含参数值的事实。因为您传递的platform参数是一个字符串,所以它调用的方法与使用string viewName
和string masterName
参数的方法匹配。
Controller
对ViewResult View()
方法有很多过载。在这种情况下,您可能希望将platform
作为对象模型传递。您可以通过使用命名参数来解决这个问题,这可以通过让编译器知道您打算调用哪个重载方法来避免混淆....
public class RegistrationController : Controller {
// GET: Registration
[Route("")]
public ActionResult CreateUser(string platform) {
return View("~/Views/Registration/CreateUser.cshtml", model: platform);
}
}
从那里一切都应该按预期工作