Проблема с Request.Form внутри .cshtml - PullRequest
0 голосов
/ 08 мая 2020

Попытка создать страницу, на которой будет раскрывающийся селектор с тремя именами изображений, и когда имя изображения выбрано и вы нажмете «Отправить», оно отобразит это изображение на странице.

Я нашел пример здесь (кажется устаревшим): https://docs.microsoft.com/en-us/aspnet/web-pages/overview/ui-layouts-and-themes/9-working-with-images

имеет: if (Request ["photoChoice"]! = null)

Где-то читали, что исправление is 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

1 Ответ

1 голос
/ 09 мая 2020

Ссылка, на которую вы ссылаетесь, используется в asp. net, а не в ядре.

Основная причина ошибки заключается в том, что вы поместили запрос. Форма не в том месте . Ваши текущие требования должны поместить код в метод 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>

Вот результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...