С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
1
.NET 3.x

Как изменить свойство non-static объекта из static метода

16.07.2011, 19:58. Показов 1910. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Понимаю, что такое не задумано средствами Net Framework, но у меня из-за этого не работает одна фишка, которую я месяц писал, вообщем у меня была идея изменять аватарку на странице пользователя сразу после выбора им нового файла. Объясню подробнее:
На этом форуме сделано так: ты выбираешь файл с аватаркой и жмешь Обновить, ава обновляется. Я подумал: Зачем пользователю жать лишнюю кнопку? Выбрал аватарку - и она обновилась.
Я написал такой код:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="registration.aspx.cs" Inherits="WebApplication.RegistrationForm" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Оформление отпусков</title>
    <script type="text/javascript">
    function Update() {
        var bytes = document.getElementById('Upload_avatarka').files[0].getAsBinary();
        PageMethods.UpdateImage(bytes, OnRequestCompleteTestMethod, OnErrorTestMethod);
    }
    function OnRequestCompleteTestMethod(result) {}
    function OnErrorTestMethod(result) {}
</script>
</head>
<body>
  <form runat="server">
    <asp:ScriptManager ID="scriptManager" runat="server" EnablePageMethods="true" />
<asp:Image ID="avatarka" runat="server" 
                ImageUrl="p.aspx?Id=21" /></td>
<asp:FileUpload ID="Upload_avatarka" runat="server" Width="100%" onchange="return Update();" /> 
    </form>       
</body>
</html>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
using System.Collections;
using System.Configuration;
using System.Data;
using System;
using System.Linq;
using System.Drawing;
using System.Web;
using System.Web.Services;
using System.Web.Configuration;
using System.Web.Security;
using System.Web.UI;
using System.Data.SqlClient;
using System.Web.Script.Services;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.IO;
using System.Xml.Linq;
 
namespace WebApplication
{
    [WebService, ScriptService]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public partial class RegistrationForm : Page
    {
        SqlConnection connect = null;
        protected void Page_Load(object sender, EventArgs e)
        {
            connect = WebUtils.connect;
        }
       
        [WebMethod, ScriptMethod]
        public static void UpdateImage(string str)
        {
            byte[] mass = new byte[str.Length];
            for (int i = 0; i < str.Length; i++) mass[i] = (byte)str[i];
            if (mass != null && mass.Length > 0)
            {
                Bitmap source = new Bitmap(new MemoryStream(mass));
                Bitmap dest = new Bitmap(100, 100);
                int max = source.Width;
                if (source.Height > max)
                {
                    double k = (double)max / (double)source.Height;
                    dest = new Bitmap(Convert.ToInt32(k * 100), 100);
                }
                else
                {
                    double k = (double)source.Height / (double)max;
                    dest = new Bitmap(100, Convert.ToInt32(k * 100));
                }
                Graphics.FromImage(dest).DrawImage(source, 0, 0, dest.Width, dest.Height);
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                dest.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                SqlCommand command = new SqlCommand("INSERT INTO Images (Image) VALUES (@avatarka)", WebUtils.connect);
                command.Parameters.AddWithValue("@avatarka", ms.ToArray());
                ms.Close();
                if (command.Connection.State == ConnectionState.Closed) command.Connection.Open();
                command.ExecuteNonQuery();
                command.CommandText = "SELECT @@IDENTITY AS ImageId FROM Images";
                SqlDataReader reader = command.ExecuteReader();
                if (reader.Read())
                {
                    decimal MyId = reader.GetDecimal(0);
                    WebUtils.ImageId = MyId;
                }
                command.Connection.Close();
                //avatarka.ImageURL = "p.aspx?Id=" + WebUtils.ImageId.ToString(); - вот это не работает
            }
        }
    }
}
Дальше приведу код хендлера, но он особо к делу отношения не имеет. Нужно исправить одну строку. Просто найти способ поменять ImageURL из статического метода. Может можно что-то придумать? Как нибудь передать этот параметр в другой метод, который изменит ImageURL?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;
using System.Collections;
using System.Data;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
 
namespace WebApplication
{
    /// <summary>
    /// Сводное описание для $codebehindclassname$
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class getImage : IHttpHandler
    {
        SqlConnection connect = WebUtils.connect;
        public void ProcessRequest(HttpContext context)
        {
            string imageId = context.Request.QueryString["id"];
            SqlCommand command = new SqlCommand("SELECT Image FROM Images WHERE ImageId='" + imageId + "'", connect);
            if (connect.State == ConnectionState.Closed) connect.Open();
            SqlDataReader reader = command.ExecuteReader();
            if (reader.Read())
            {
                context.Response.ContentType = "image/jpeg";
                context.Response.OutputStream.Write(reader.GetSqlBinary(0).Value, 0, reader.GetSqlBinary(0).Length);
                context.Response.End();
            }
            reader.Close();
            connect.Close();
        }
 
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
0
IT_Exp
Эксперт
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
Блог
16.07.2011, 19:58
Ответы с готовыми решениями:

Как обратится к non static property из static метода
День добрый, сразу вопрос static - как правильно статический или статичный? У меня есть некий...

Как обратиться к свойству объекта WPF из метода static класса?
Как обратиться к свойству объекта WPF из метода static класса? Есть окно с меню, надписью и...

Обращение к не static базе данных из static-метода
Есть у меня БД .sqlite . Она создаётся из не static метода: public IDbConnection database;...

Изменить текст в textBox из static метода
Всем здрасте , есть класс называется Worcking , там есть что-то подобное private static void...

2
мастер топоров
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
16.07.2011, 21:47 2
Цитата Сообщение от galileopro Посмотреть сообщение
Просто найти способ поменять ImageURL из статического метода.
[Captaion_O]ну передайте в статический метод объект, поле которого вы хотите изменить и значение, на которое вы хотите изменить значение поля[/Captaion_O]
1
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
16.07.2011, 22:12  [ТС] 3
Я так пробовал. Почему не знаю пока, но вот так метод просто не вызывается
Javascript
1
2
3
4
5
6
7
8
9
<script type="text/javascript">
    function Update() {
        var bytes = document.getElementById('Upload_avatarka').files[0].getAsBinary();
        var Image = document.getElementById('avatarka');
        PageMethods.UpdateImage(bytes, Image, OnRequestCompleteTestMethod, OnErrorTestMethod);
    }
    function OnRequestCompleteTestMethod(result) {}
    function OnErrorTestMethod(result) {}
</script>
C#
1
2
3
4
5
[WebMethod, ScriptMethod]
 public static void UpdateImage(string str, object ava)
{
...
}
Это может быть одна из особенностей PageMethods. Полностью объект не передается. Хотя это мои домыслы, почему он не вызывается я не знаю. Я придумал такой способ:
Javascript
1
2
3
4
5
6
7
8
9
10
<script type="text/javascript">
    function Update() {
        var bytes = document.getElementById('Upload_avatarka').files[0].getAsBinary();
        PageMethods.UpdateImage(bytes, OnRequestCompleteTestMethod, OnErrorTestMethod);
        var source = "p.aspx?Id="+WebApplication.WebUtils.ImageId;
        document.getElementById('avatarka').src = source;
    }
    function OnRequestCompleteTestMethod(result) {}
    function OnErrorTestMethod(result) {}
</script>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web.Configuration;
using System.Data.SqlClient;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using System.Xml.Linq;
 
namespace WebApplication
{
    public class WebUtils
    {
        public static decimal ImageId = 0;
    }
}
То есть создал класс со статической переменной ImageId, эта переменна "видна из кода на C#, а значит я туда занесу верный ImageId + по логике этот класс должен быть виден из JavaScript, но почему то
Javascript
1
var source = "p.aspx?Id="+WebApplication.WebUtils.ImageId;
не присваивает ничего((
0
16.07.2011, 22:12
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
16.07.2011, 22:12
Помогаю со студенческими работами здесь

Как правильно разместить static поверх других static-ов
Есть кнопка, нажимая на которую становится видно статик. проблема в том, что статик отображатеся...

Вызов public метода public класса внутри static метода static класса
Подскажите, пожалуйста, возможен вызов не статического метода не статического класса внутри...

Невозможно передать ArrayList в аргументы метода без модификатора static у этого метода или метода main
Крч, хочу передать экземпляр класса ArrayList в метод, но ide говорит, что нельзя это сделать, пока...

Как вызвать postInvalidate() из static метода?
Мне надо из static метода некоего класса (вызывается из native-приложения на Qt) вызвать обновление...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Блоги программистов
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­хронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9 Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget. . .
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin. Есть ещё регистры,. . .
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru