функция получения изображения из базы данных не работает - PullRequest
0 голосов
/ 27 марта 2019

Я новичок в Javascript.Я хочу добавить значок ко всем веб-страницам моего проекта.Этот значок меняется в зависимости от того, кто входит в мою страницу.Что я сейчас пытаюсь сделать, так это при загрузке главной страницы (когда у меня есть все данные в коде, включая выбранный значок), я ввел функцию js для изменения значка:

    (function icon(image) {
        var link = document.querySelector("link[rel*='icon']") || document.createElement('link');
        link.type = 'image/x-icon';
        link.rel = 'shortcut icon';
        link.hre = image;
        document.getElementsByTagName('head')[0].appendChild(link);
    })();

(адаптировано изздесь: Динамическое изменение иконки сайта )

я пытаюсь вызвать эту функцию с помощью метода Page.ClientScript.RegisterStartupScript ():

  (protected void Page_Load(object sender, EventArgs e)
  {
  if (!Page.IsPostBack)
     {
        //...

        UserModel usuario = (UserModel)Session["usuario"];

        //...

        Page.ClientScript.RegisterStartupScript(this.GetType(), "icone", $"icone({(Bitmap)new ImageConverter().ConvertFrom(usuario.imagem)});", true);
     }
  }

Метод просто не выполняется(она также не возвращает ошибку, она просто «перепрыгивает»), и я искренне понятия не имею, почему.

OOOOR, возможно, есть лучший способ сделать это, но я просто не могу понять это.

Для записи, я не имею значки / изображения в папке.Я ДОЛЖЕН получить их из базы данных.

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

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Вместо использования Javascript, вы можете просто связать вашу иконку быстрого доступа с обработчиком, который немедленно возвращает изображение. (Следующий код не проверен, он там, чтобы описать основной процесс!)

На вашей странице:

<link rel="shortcut icon" type="image/x-icon" href="/userimage.ashx">

userimage.ashx:

<%@ WebHandler Language="C#" Class="UserImageHandler" %>

userimage.ashx.cs:

using System;
using System.Web;

public class UserImageHandler : IHttpHandler {

    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "image/png"; // or image/jpg, image/bmp, ...
        var image = FetchImageFromDatabase(context.User.Identity.Name); // your logic for fetching the image from the database
            // You could also return a default image here, if the user has not selected one.
        context.Response.Write(image); // Write the binary data to the response stream.
    }

    public bool IsReusable {
        get {
            return false;
        }
    }
}
0 голосов
/ 27 марта 2019

Необходимо отредактировать несколько вещей:

Во-первых, подумайте, что вы получили параметры для RegisterStartupScript, которые не установлены должным образом. 3-е значение должно быть кодом JavaScript для запуска. Вы можете добавить весь скрипт как переменную (как указано здесь: https://docs.microsoft.com/en-us/dotnet/api/system.web.ui.clientscriptmanager.registerstartupscript?view=netframework-4.7.2), или вы можете добавить свою функцию в тегах <script>...</script> на страницу HTML, а затем просто вызвать функцию из RegisterStartupScript (как третий параметр). значение)

Во-вторых, в вашей функции JavaScript есть опечатка:

link.hre = image; должно быть link.href = image;

В-третьих, (эта часть может потребовать некоторой работы), изображение должно быть URL-адресом (строкой) к реальному изображению (а не двоичному растровому изображению) ... сначала вам может понадобиться сохранить изображение на веб-сервере как .jpg или .png и используйте его URL-адрес, или вам нужно преобразовать изображение в Base64 и добавить изображение через URL-адреса данных https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs

Наконец, вы изменили JavaScript из исходного примера (вы упомянули). В этом случае вы хотите отправить URL-адрес изображения в качестве параметра функции icon Однако функция icon инкапсулирована. Таким образом, функция в основном в частной области. Удалите инкапсуляцию вокруг функции, если необходимо вызвать ее из другой функции на странице ... надеюсь, это имеет смысл.

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