Сохранить текстовый редактор с форматированным содержимым в поле blob в базе данных mysql

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

Это моя ViewModel:

public class ArticleViewModel
{
    [Required]
    [Display(Name = "Title")]
    public string Title { get; set; }

    [Required]
    [Display(Name = "Description")]
    public string Description { get; set; }

    [Required]
    [Display(Name = "Article Body")]
    public string ArticleBody { get; set; }

}

Тело статьи — это мое расширенное текстовое поле, подобное этому, на мой взгляд:

<div class="editor-label">
    @Html.LabelFor(model => model.ArticleBody)
</div>
<div class="editor-field">
    @Html.TextAreaFor(model => model.ArticleBody, new { placeholder = "Type the content of the article", @class = "ckeditor" })
    @Html.ValidationMessageFor(model => model.ArticleBody, string.Empty)
</div>

В моем действии в моем контроллере:

[HttpPost]
    public ActionResult Create(ArticleViewModel model)
    {
        if (ModelState.IsValid)
        {
            try
            {
                // Get the userID who created the article
                User usr = userrepo.FindByUsername(User.Identity.Name);
                model.UsernameID = usr.user_id;

                repository.AddArticle(model.Title, model.Description, model.ArticleBody);
            }
            catch (ArgumentException ae)
            {
                ModelState.AddModelError("", ae.Message);
            }

            return RedirectToAction("Index");

        }

        return View(model);
    }

Но в моем репозитории я получаю: Cannot convert type 'string' to 'byte[]'

Репозиторий:

public void AddArticle(string Title, string Description, string ArticleBody)
    {
        item Item = new item()
        {
            item_title = Title,
            item_description = Description,
            article_body = ArticleBody,
            item_createddate = DateTime.Now,
            item_approved = false,
            user_id = 1,
            district_id = 2,
            link = "",
            type = GetType("Article")
        };

        try
        {
            AddItem(Item);
        }

        catch (ArgumentException ae)
        {
            throw ae;
        }
        catch (Exception)
        {
            throw new ArgumentException("The authentication provider returned an error. Please verify your entry and try again. " +
                "If the problem persists, please contact your system administrator.");
        }

        Save();
        // Immediately persist the User data

    }

Может ли кто-нибудь дать мне начало или помочь мне с этим?


person nielsv    schedule 21.08.2013    source источник


Ответы (1)


Должен быть формат метода репозитория, например

Public void AddArticle(string title, string  Description, string ArticleBody)
{
//logic
}

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

Изменить:

Проверьте тип данных столбца article_body в базе данных? это должно мне Nvarchar(Max) .

person Ramesh Rajendran    schedule 21.08.2013
comment
Обновлено начало поста. Да, это строка ArticleBody, но когда я пытаюсь создать новый элемент, он говорит, что невозможно преобразовать в байт. - person nielsv; 21.08.2013
comment
Какой у вас тип данных столбца article_body в вашей базе данных? - person Ramesh Rajendran; 21.08.2013
comment
В моей базе данных mysql это BLOB, но у меня есть модель в моем проекте VB, где тип данных является двоичным, потому что вы не можете выбрать BLOB. - person nielsv; 21.08.2013
comment
Какой ? Измените байт типа данных на nvarchar(Max) как (string)> И обновите файл Edmx или dbml. - person Ramesh Rajendran; 21.08.2013
comment
Теперь я получаю другую ошибку: от клиента было обнаружено потенциально опасное значение Request.Form (ArticleBody=‹p›sqdsqdsqdsq‹/p› ). - person nielsv; 21.08.2013
comment
Добавьте эту строку в ваш webconfig '‹system.web› ‹httpRuntime requestValidationMode=2.0 /› ‹/system.web›' - person Ramesh Rajendran; 21.08.2013