Не могу понять, почему входная строка была не в правильном формате при создании экземпляра моего объекта?

#c# #asp.net-mvc #parsing #format

#c# #asp.net-mvc #синтаксический анализ #формат

Вопрос:

У меня есть простая форма с тремя полями, я нажимаю «Отправить», я получаю данные в контроллере, я пытаюсь создать экземпляр объекта с этими данными, чтобы добавить его в свою базу данных через репозиторий, но когда я нажимаю «Отправить», я получаю сообщение об ошибке, которое вы увидите вконец

Итак, это мой метод контроллера: ( Я добавил int.Попробуйте метод анализа, основанный на ответе здесь, надеясь, что это решение моей проблемы, но нет)

     [HttpPost]
    public IActionResult insertBook(string bookName, string bookPrice, string categoryId)
    {
        Category category = _categoryRepository.getCategoryById(Int32.Parse(categoryId));

        int val = 0;
        bool result = int.TryParse(categoryId, out val);

        Book book = result ? new Book(
            10,
            bookName,
            Double.Parse(bookPrice),
            "https://i.stack.imgur.com/IyQzE.png?s=128amp;g=1amp;gamp;s=32",
            val
        ) : new Book(
            10,
            bookName,
            Double.Parse(bookPrice),
            "https://i.stack.imgur.com/IyQzE.png?s=128amp;g=1amp;gamp;s=32",
            3 // default category is with id 3
        );

        _bookRepository.insertBook(book);
        return RedirectToAction("Index", "Home");
    }
  

Вот моя книга сущностей (добавлен конструктор) :

 public class Book
{
    [Key]
    public int BookId { get; set; }
    public string BookName { get; set; }
    public double BookPrice { get; set; }
    public string BookImageUrl { get; set; }
    [ForeignKey("Category")]
    public int CategoryId { get; set; }
    public Category Category { get; set; }

    public Book(int bookId, string bookName, double bookPrice, string bookImageUrl, int categoryId){
        BookId = bookId;
        BookName = bookName;
        BookPrice = bookPrice;
        BookImageUrl = bookImageUrl;
        CategoryId = categoryId;
    }
}
  

Это ошибка, которую я получаю :

 System.FormatException: 'Input string was not in a correct format.'
  

Когда я проверяю, например, мои данные, полученные из формы, я вижу, что они в правильном формате, я имею в виду, что я ожидал (так что Int32.parse здесь должно быть хорошо), и ПОЧЕМУ BOOK РАВЕН NULL?

введите описание изображения здесь

Есть идеи?

Любая помощь будет высоко оценена.

Комментарии:

1. Происходит ли это int.Parse при вызове или при double.Parse вызове? Если это последнее, это может быть проблема с десятичным разделителем текущего языка. Попробуйте double.Parse(bookPrice, CultureInfo.InvariantCulture)

Ответ №1:

Исключение формата наиболее вероятно из-за Double.Parse(bookPrice) . Попробуйте использовать инвариантную культуру, например:

 Convert.ToDouble(bookPrice, CultureInfo.InvariantCulture);
  

Просто чтобы убедиться, вы также можете использовать это:

 double parsedBookPrice;
var isValidDouble = Double.TryParse(bookPrice, out parsedBookPrice);
  

Если isValidDouble значение равно false, то 45.00 формат, скорее всего, неверен для культуры вашего сервера.

Комментарии:

1. Да, значение isValidDouble равно false , спасибо, что обнаружили это для меня, но я все еще не понимаю, почему!

2. Попробуйте с 45,00

3. Я уже сделал это, спасибо, хотя позже у меня возникнут проблемы, потому что у меня есть два приложения, использующие одну и ту же базу данных, но спасибо! это была моя проблема: D

4. @TaouBen: просто используйте Convert.ToDouble(bookPrice, CultureInfo.InvariantCulture) , как писал Атанасиос. Это независимо от текущего языка использует разделитель ‘.’.

5. Athenasios Да, я уже это сделал, вы оба были полезны