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
我不明白为什么它在那里时找不到视图,或者为什么它甚至试图用查询字符串参数的名称来找到视图。
它可能可以找到视图。它是找不到的母版页。
那是因为您正在使用
class Controller : ... {
ViewResult View(string viewName, string masterName);
}
Run Code Online (Sandbox Code Playgroud)
重载方法
使用视图名称和 母版页名称创建System.Web.Mvc.ViewResult对象,该名称将视图呈现给响应。
提示是在搜索视图中包含参数值。因为您传递的platform参数是一个字符串,所以它将调用的方法与使用string viewNameand string masterName参数的方法相匹配。
Controller该ViewResult 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)
从那里一切都应该按预期工作
| 归档时间: |
|
| 查看次数: |
4194 次 |
| 最近记录: |