رفع خطای Input string was not in a correct format
من پروژه م رو با Asp.net core 5 نوشتم فیلد تاریخ رو توی ویو مدلم به این شکل تعریف کردم
[Display(Name = "تاریخ تولد")]
[Required(AllowEmptyStrings = false, ErrorMessage = "{0} وارد نشده است.")]
public DateTime borndate { get; set; }
توی ویو هم به این شکل
<div class="col-12" data-MdDateTimePicker="true" data-trigger="click" data-targetselector="#exampleInput4">
<label asp-for="borndate">تاریخ تولد*</label>
<input asp-for="borndate" data-trigger="click" id="exampleInput4" type="text" class="form-control" data-mddatetimepicker="true" value="1400/01/01" data-placement="right" />
<span asp-validation-for="borndate" class="text-danger"></span>
</div>
توی قسمت کنترلر هم به اکشنم رو به این شکل نوشتم قبلا از این که datapicker بزارم این کد درست کار می کرد اما الان با خطای
Input string was not in a correct format مواجه میشم ( این کد خلاصه شده ست و من فقط قسمت مربوطه رو گذاشتم)
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult CreatePersonIdentityInfo(string borndate,string birthcertificatedate)
{
PersonIdentityInfo info = new PersonIdentityInfo();
PersianCalendar persianCalendar = new PersianCalendar();
info.BornDate = persianCalendar.ToDateTime(Convert.ToInt32(borndate.Split('/')[0]), Convert.ToInt32(borndate.Split('/')[1].ToString()),Convert.ToInt32(borndate.Split('/')[2].ToString()), 0, 0, 0, 0);
info.BirthCertificateDate = persianCalendar.ToDateTime(Convert.ToInt32(birthcertificatedate.Split('/')[0].ToString()), Convert.ToInt32(birthcertificatedate.Split('/')[1].ToString()), Convert.ToInt32(birthcertificatedate.Split('/')[2].ToString()), 0, 0, 0, 0);
_context.PersonIdentityInfos.Add(info);
}
return RedirectToAction("Index");
}
خطا مربوط به این خط هست
info.BornDate = persianCalendar.ToDateTime(Convert.ToInt32(borndate.Split('/')[0]), Convert.ToInt32(borndate.Split('/')[1].ToString()),Convert.ToInt32(borndate.Split('/')[2].ToString()), 0, 0, 0, 0);
پاسخ هوش مصنوعی
برای رفع خطای "Input string was not in a correct format"، می توانید از روش زیر استفاده کنید:
این خطا معمولاً هنگامی رخ می دهد که فرمت ورودی با نوع متغیر مورد نظر (در اینجا DateTime) سازگار نیست. شما باید ورودی borndate را بررسی کنید و اطمینان حاصل کنید که فرمت آن درست است. در اینجا مراحل اصلاح شده را برای شما آورده ام:
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult CreatePersonIdentityInfo(string borndate, string birthcertificatedate)
{
PersonIdentityInfo info = new PersonIdentityInfo();
PersianCalendar persianCalendar = new PersianCalendar();
// اطمینان از اینکه ورودی خالی نباشد
if (!string.IsNullOrEmpty(borndate))
{
var dateParts = borndate.Split('/');
if (dateParts.Length == 3)
{
// تبدیل تاریخ به شکل عددی
int year = Convert.ToInt32(dateParts[0]);
int month = Convert.ToInt32(dateParts[1]);
int day = Convert.ToInt32(dateParts[2]);
info.BornDate = persianCalendar.ToDateTime(year, month, day, 0, 0, 0, 0);
}
else
{
ModelState.AddModelError("borndate", "فرمت تاریخ تولد صحیح نیست.");
}
}
// مشابه عملیات برای تاریخ گواهی تولد
if (!string.IsNullOrEmpty(birthcertificatedate))
{
var birthDateParts = birthcertificatedate.Split('/');
if (birthDateParts.Length == 3)
{
int year = Convert.ToInt32(birthDateParts[0]);
int month = Convert.ToInt32(birthDateParts[1]);
int day = Convert.ToInt32(birthDateParts[2]);
info.BirthCertificateDate = persianCalendar.ToDateTime(year, month, day, 0, 0, 0, 0);
}
else
{
ModelState.AddModelError("birthcertificatedate", "فرمت تاریخ گواهی تولد صحیح نیست.");
}
}
if (ModelState.IsValid)
{
_context.PersonIdentityInfos.Add(info);
return RedirectToAction("Index");
}
// در صورت وجود خطا، دوباره به ویو برمی گردد
return View(info);
}
در این کد، قبل از تبدیل تاریخ، ورودی های borndate و birthcertificatedate بررسی می شوند تا اطمینان حاصل شود که فرمت آن ها صحیح است و از خطاهای مربوط به تبدیل نیز جلوگیری شود.
چند تا نکته رو در رابطه سوالتون میگم. شما فیلد تاریخ رو از نوع DateTime تعریف کردید. و در اکشن هم برای دریافت مقدار تاریخ از string استفاده کردید. تا اینجا درست هست.
در این مرحله یک Breakpoint روی اکشن خودتون قرار بدید و مطمئن بشید که مقدار تاریخ به صورت string به اکشن شما ارسال شده.
خب حالا شما باید مقدار تاریخ دریافت شده به صورت string رو به صورت DateTime تبدیل کنید. برای این منظور یک کلاس ایجاد کنید و کد زیر رو داخلش کپی و پیست کنید :
using MD.PersianDateTime.Core;
using System;
public static class ConvertDateTime
{
public static DateTime ConvertShamsiToMiladi(string date)
{
PersianDateTime persianDateTime = PersianDateTime.Parse(date);
return persianDateTime.ToDateTime();
}
public static string ConvertMiladiToShamsi(this DateTime? date, string format)
{
PersianDateTime persianDateTime = new PersianDateTime(date);
return persianDateTime.ToString(format);
}
}
در این کلاس دو تابع هست. یکی برای تبدیل تاریخ میلادی به شمسی و دیگری برای تبدیل تاریخ شمسی به میلادی. از این دو تابع می تونید به راحتی در هر جایی از پروژه استفاده کنید.
تبدیل تاریخ میلادی به شمسی و بالعکس در سی شارپ
در لینک بالا به صورت کامل و به همراه مثال نحوه استفاده از این کلاس گفته شده.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2