编辑:我现在已将Request
更改为Context.Request
,并且现在收到与此帖子标题不同的错误:Cannot apply indexing with [] to an expression of type 'HttpRequest'
所以我正在尝试向ASP.Net介绍自己,并遵循这里提供的在线教程:https://www.w3schools.com/asp/webpages_forms.asp('显示图像'部分)。我试图在MVC样式布局中实现它。结构的起始模板是运行dotnet new -t web
时生成的模板的修改版本。
在我的Pictures.cshtml文件中,我有以下内容:
@{
ViewData["Title"] = "Pictures";
var imagePath="";
if (Request["Choice"] != null)
{
imagePath="images/" + Request["Choice"];
}
}
<h2>Pictures</h2>
<form method="post" action="">
I want to see:
<select name="Choice">
<option value="Photo1.jpg">Photo 1</option>
<option value="Photo2.jpg">Photo 2</option>
<option value="Photo3.jpg">Photo 3</option>
</select>
<input type="submit" value="Submit" />
@if (imagePath != "")
{
<p>
<img src="@imagePath" alt="Sample" />
</p>
}
</form>
这是从MainController.cs调用的,如下所示:
using Microsoft.AspNetCore.Mvc;
namespace WebApp.Controllers
{
public class MainController : Controller
{
public IActionResult Pictures()
{
return View();
}
}
}
还有一个引用_Layout.cshtml的_ViewStart.cshtml。
运行时,我被重定向到我的错误页面,终端发出错误The name 'Request' does not exist in the current context
有人可以帮我指出正确的方向,我错过了什么或我做错了什么?为什么本教程示例在我的项目上下文中不起作用?
干杯:)
答案 0 :(得分:1)
我在 ASP Core 5.0 中使用它:
ViewContext.HttpContext.Request.Query["Choice"]
JS 中的示例:
if (getParameterByName("error") != null) {
window.location.href = "@Url.Action("Login", "Home" , new { error = ViewContext.HttpContext.Request.Query["Choice"] })";
}
答案 1 :(得分:0)
我在Core 2.1中有同样的错误。我发现,如果将其放在ViewData
或Styles
部分中,则很难调试(或者有些奇怪)。否则,它应针对特定参数像这样工作:
@Context.Request.Query["Choice"]
对于您的代码,我只请求一次该值并将其分配给一个变量,然后查看它是否为空。然后,从您的变量创建路径:
var choice = @Context.Request.Query["Choice"];
var imagePath="";
if (!String.IsNullOrEmpty(choice)){
imagePath="images/" + choice;
}
作为奖励,您还可以通过以下步骤获得带有所有名称和值的完整查询字符串(以防您想解析它或其他):
@Context.Request.QueryString