Хобрук: Ваш путь к мастерству в программировании

CS0120: требуется ссылка на объект

Получение этой ошибки при отправке формы в файл действия savetext.aspx:

Compiler Error Message: CS0120: An object reference is required for the nonstatic field, method, or property 'System.Web.UI.Page.Request.get'

В этой строке:

string path = "/txtfiles/" + Request.Form["file_name"];

Весь код:

<%@ Page Language="C#" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.IO" %>

<script runat="server">

class Test 
{
    public static void Main() 
    {
        string path = "/txtfiles/" + Request.Form["file_name"];
        if (!File.Exists(path)) 
        {
            using (StreamWriter sw = File.CreateText(path)) 
            {
                sw.WriteLine(request.form["seatsArray"]);
            sw.WriteLine("");
            }   
        }

        using (StreamReader sr = File.OpenText(path)) 
        {
            string s = "";
            while ((s = sr.ReadLine()) != null) 
            {
                Console.WriteLine(s);
            }
        }
    }
}
</script>

Как это исправить?

Спасибо!


  • public static void Main() на странице ASPX?! Хм... Может быть, тебе следует объяснить, что ты пытаешься сделать, поскольку я чувствую возмущение в силе. 14.07.2010
  • Разве вам не нужно ‹%@ Import Namespace=System.Web.UI.Page %› 14.07.2010
  • Чтобы взять содержимое массива (скрытый объект формы seatArray) и поместить его в текстовый файл с именем, которое пользователь ввел в имя_файла. @MikeTWebb, это просто выдает еще одну ошибку: CS0138: «System.Web.UI.Page» — это тип, а не пространство имен. Спасибо 14.07.2010
  • @Дарин, @IceDragon....спасибо. Мне было любопытно... 14.07.2010
  • @Darin Dimitrov - Изучение метода File.CreateText в MSDN (msdn.microsoft.com/en-us/library/system.io.file.createtext.aspx), в примере есть public static void Main()? Спасибо 14.07.2010
  • @IceDragon, да, в консольном приложении. Веб-приложение ASP.NET — это совершенно другой зверь. Я бы посоветовал вам начать читать здесь: asp.net/get-started 14.07.2010

Ответы:


1

Удалите этот класс Test, а также статический метод Main и замените его методом экземпляра Page_Load следующим образом:

<%@ Page Language="C#" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.IO" %>

<script runat="server">
    protected void Page_Load(object sender, EventArgs e) 
    {
        string path = "/txtfiles/" + Request.Form["file_name"];
        if (!File.Exists(path)) 
        {
            using (StreamWriter sw = File.CreateText(path)) 
            {
                sw.WriteLine(Request.Form["seatsArray"]);
                sw.WriteLine("");
            }   
        }

        using (StreamReader sr = File.OpenText(path)) 
        {
            string s = "";
            while ((s = sr.ReadLine()) != null) 
            {
                Response.Write(s);
            }
        }
    }
</script>

Также вы, вероятно, захотите вывести HttpResponse вместо консоли в веб-приложении. Еще одно замечание по поводу вашего пути к файлу: "/txtfiles/", NTFS обычно не любит такие шаблоны.

14.07.2010

2

Дарин Димитров дал вам подсказку в правильном направлении, но я хочу просто дать ответ на вопрос, почему происходит эта ошибка. Нормальная ошибка должна быть:

Имя «Запрос» не существует в текущем контексте

Это происходит потому, что для каждого aspx файла создается класс, который по умолчанию наследуется от Page. Все новые классы, определенные внутри файла aspx, становятся вложенными классами этого файла. Request является членом класса Page, и эта конкретная ошибка возникает из-за того, что вы пытаетесь получить к нему доступ из статического метода вложенного типа.

14.07.2010
Новые материалы

Как ИИ меняет сельское хозяйство
Прочтите Статью Кэтлин Уолч в Forbes о том, как ИИ меняет сельское хозяйство . Сельское хозяйство и земледелие - одна из древнейших и важнейших профессий в мире. Человечество прошло долгий..

Slack: проектирование современных интерфейсов человека и ИИ
Когда Стюарт Баттерфилд выделил Slack из быстро исчезающей онлайн-игры Tiny Speck, его перспективы были в лучшем случае неопределенными. Существовал очевидный спрос на средства связи на рабочем..

HTTP1.1 против HTTP2
Http расшифровывается как HyperText Transfer Protocol, это в основном метод, который компьютеры и серверы используют для запроса и отправки информации. HTTP1.1 - это более старая версия Http, а..

Радость вырезания
Радость фрагментов По какой-то причине, когда я начал программировать в колледже, я активно сопротивлялся целому ряду земных благ, которые сделали бы мою жизнь чуточку удобнее. Я в основном..

Создайте стройный слайдер с нуля без каких-либо внешних инструментов
Слишком долго я полагался на сторонние плагины и инструменты для простых слайдеров. Пока в один прекрасный день в моей крошечной голове не загорелась лампочка, которую я могу сделать..

Буферы протоколов, часть 01: соглашения об именах и файловая организация
Если вам нравится читать статьи на Medium и вы заинтересованы в том, чтобы стать участником, я буду рад поделиться с вами своей реферальной ссылкой!

Наши партнеры
Globex SCI — уникальная система, которая хранит и позволяет использовать большие базы данных, опубликованные в блокчейне. Используя алгоритмы глубокого обучения и ИИ, мы можем прогнозировать..