دسته بندی ها
08:22 1400/02/08

رفع خطای Input string was not in a correct format

مشخصات سوال کننده :
کاربر : yasasemani     امتیاز کاربر : 6     رتبه کاربر : 80
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 4915
2 نظر
fateme : اکشنی که قرار دادید خیلی پارامتر ورودی داره. بهتره وقتی سوال رو میخاید مطرح کنید اونجایی که خطا هست رو فقط بنویسید. الان این همه پارامتر رو باید بگردیم تا پارامتر تاریخ شما رو پیدا کنیم. سوال رو خلاصه کنید

امتیاز کاربر : 1635   رتبه کاربر : 2   تاریخ ثبت : 06:30 1400/02/08
yasasemani : اکشن رو خلاصه کردم و فقط قسمت تاریخ ها رو گذاشتم

امتیاز کاربر : 6   رتبه کاربر : 80   تاریخ ثبت : 06:37 1400/02/08
هوش مصنوعی

پاسخ هوش مصنوعی

برای رفع خطای "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 بررسی می شوند تا اطمینان حاصل شود که فرمت آن ها صحیح است و از خطاهای مربوط به تبدیل نیز جلوگیری شود.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : fateme 18:36 1400/02/08

چند تا نکته رو در رابطه سوالتون میگم. شما فیلد تاریخ رو از نوع 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);
    }
}

 

در این کلاس دو تابع هست. یکی برای تبدیل تاریخ میلادی به شمسی و دیگری برای تبدیل تاریخ شمسی به میلادی. از این دو تابع می تونید به راحتی در هر جایی از پروژه استفاده کنید.

تبدیل تاریخ میلادی به شمسی و بالعکس در سی شارپ 

در لینک بالا به صورت کامل و به همراه مثال نحوه استفاده از این کلاس گفته شده.

به این پاسخ امتیاز بدهید    ‎−1
امتیاز: 1635 رتبه: 2
1 نظر
yasasemani : ممنون مشکل رفع شد

امتیاز کاربر : 6   رتبه کاربر : 80   تاریخ ثبت : 07:28 1400/02/10
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود