Ger Hayden Ответов: 1

Почему .Объем основной HTTP-запрос POST очистив мой байтовый массив


У меня есть проблема с HTTP-сообщением .NET Core, очищающим мой байтовый массив.

Я могу выбрать изображение, захватить его в контроллере, сохранить в базе данных, а затем успешно восстановить рендеринг при следующей загрузке формы.

А потом начинается самое интересное. Если я нажму кнопку Сохранить в форме, ничего не меняя, и изучу класс, на котором основана модель формы, как только откроется контроллер с тегом [HttpPost], все в классе останется неизменным, как и ожидалось, за исключением моего байтового массива и свойств ImageMimeType

Они оба были опустошены. Есть идеи, почему это может быть?
public Byte[] p_Photo
{
    get
    {
        return m_Photo;
    }
    set
    {
        m_Photo = value;
        m_FlagSettings = m_FlagSettings | m_FlagBits.PHOTO;
    }

}
[Column("ImageMimeType")]
public string p_ImageMimeType {
    get
    {
        return m_ImageMimeType;
    }
    set
    {
        m_ImageMimeType = value;
    }
}
protected string m_ImageMimeType;
protected Byte[] m_Photo;


Что я уже пробовал:

Много поиска в интернете, а также обходной путь в javascript, чтобы взять визуализированное изображение и передать его обратно в Html-элемент. Пока никакой радости.

1 Ответов

Рейтинг:
7

Richard Deeming

Вам понадобится скрытое поле с именем, соответствующим свойству, которое вы пытаетесь сохранить.

Для типа MIME это просто:

@Html.HiddenFor(m => m.p_ImageMimeType)

Для байтов изображений это не так просто, так как массивы байтов по умолчанию не поддерживаются. Вы можете написать пользовательскую привязку модели; но, вероятно, проще использовать отдельное свойство:
public string p_PhotoData
{
    get { return m_Photo == null ? null : Convert.ToBase64String(m_Photo); }
    set { m_Photo = string.IsNullOrEmpty(value) ? null : Convert.FromBase64String(value); }
}
@Html.HiddenFor(m => m.p_PhotoData)


Ger Hayden

Спасибо, Ричард, я как раз собирался написать, что у меня уже есть @Html.Скрыто для всех свойств, включая эти два, когда этот маленький голос предложил сначала проверить cshtml. Их там нет! Интересное использование собственности, я добавлю их и попробую ваше предложение по собственности утром и доложу об этом.

Ger Hayden

Это были пропавшие Хиддены. Очень ценю.