【问题标题】:Trouble with Request.Form inside .cshtml.cshtml 中的 Request.Form 出现问题
【发布时间】:2020-08-23 13:40:17
【问题描述】:

尝试创建一个页面,该页面将具有三个图像名称的下拉选择器以及选择图像名称并且您命中提交时,它将在页面上显示该图像。

我在这里找到了一个例子(似乎已经过时了):https://docs.microsoft.com/en-us/aspnet/web-pages/overview/ui-layouts-and-themes/9-working-with-images

有:if(Request["photoChoice"] != null)

在某处读到更正是 Request.Form

@{ var imagePath = "";
    if (Request.Form["photoChoice"] != null)
        {
            imagePath = @"images\" + Request.Form["photoChoice"];
        }
}


<form method="post" action="">
    <div>
        I want to see:
        <select name="photoChoice">
            <option value="Photo1.jpg">Photo 1</option>
            <option value="Photo2.jpg">Photo 2</option>
            <option value="Photo3.jpg">Photo 3</option>
        </select>
        &nbsp;
        <input type="submit" value="Submit" />
    </div>
    <div style="padding:10px;">
        @if (imagePath != "")
        {
            <img src="@imagePath" alt="Sample Image" width="300" />
        }
    </div>
</form>

我遇到的第一个错误是: " 运算符 '!=' 在 'StringValues' 和 'null' 类型的操作数上不明确"

在 if 语句中请求的开头添加(对象)

@{ var imagePath = "";
    if ((object)Request.Form["photoChoice"] != null)
        {
            imagePath = @"images\" + Request.Form["photoChoice"];
        }

现在我在尝试编译站点时收到另一个错误“InvalidOperationException: Incorrect Content-Type”。它确实引用了 If 代码行

【问题讨论】:

    标签: asp.net-core razor-pages


    【解决方案1】:

    你引用的链接是用在asp.net中的,不是在core中的。

    报错的主要原因是你把request.Form放在了 错误的地方。您当前的要求应该把代码 进入后面代码中的OnPost方法。

    在核心实现这个功能的方法有很多,但是需要在后面代码中的post方法中触发。

    请参考this

    最简单的方法是在后面的代码中bind fields。详情请参考以下内容。

    Page.cs:

    public class ShowImagesModel : PageModel
        {
            [BindProperty]
            public string imagePath { get; set; }
            [BindProperty]
            public string photoChoice { get; set; }
            public void OnGet()
            {
                imagePath = "";
    
            }
            public void OnPost()
            {
                if (!string.IsNullOrEmpty(photoChoice))
                {
                    imagePath = @"images\" + photoChoice;
                }
            }
    
        }
    

    查看:

    @page
    @model WebApplication1_razor_page.ShowImagesModel
    @{
        ViewData["Title"] = "ShowImages";
        Layout = "~/Pages/Shared/_Layout.cshtml"; 
    } 
    <h1>ShowImages</h1>
    
    <form method="post" action="">
        <div>
            I want to see:
            <select asp-for="photoChoice" >
                <option value="Photo1.jpg">Photo 1</option>
                <option value="Photo2.jpg">Photo 2</option>
                <option value="Photo3.jpg">Photo 3</option>
            </select>
            &nbsp;
            <input type="submit" value="Submit" />
        </div>
        <div style="padding:10px;">
            @if (Model.imagePath != "")
            {
                <img src="@Model.imagePath" alt="Sample Image" width="300" />
            }
        </div>
    </form>
    

    结果如下:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2020-07-21
      • 2014-05-03
      • 2022-01-07
      • 1970-01-01
      • 2019-05-05
      • 2011-09-23
      相关资源
      最近更新 更多