#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 Да, я уже это сделал, вы оба были полезны