Не удается редактировать n поля модели с модели, у которой больше n полейC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Не удается редактировать n поля модели с модели, у которой больше n полей

Сообщение Anonymous »

Модель моего представления: < /p>
public class PatientEditInfoViewModel
{
[Required(ErrorMessage = "لطفاً شماره تماس دوم را وارد کنید")]
[Phone(ErrorMessage = "شماره تماس دوم معتبر نیست")]
[Display(Name = "شماره تلفن دوم")]
public string SecondaryPhoneNumber { get; set; }

[Required(ErrorMessage = "لطفاً کد ملی را وارد کنید")]
[StringLength(10, MinimumLength = 10, ErrorMessage = "کد ملی باید دقیقاً 10 رقم باشد")]
[Display(Name = "کد ملی")]
public string NationalCode { get; set; }

[Required(ErrorMessage = "لطفاً تصویر کارت ملی را وارد کنید")]
[Display(Name = "تصویر کارت ملی")]
public string NationalCardImagePath { get; set; }

[Required(ErrorMessage = "لطفاً آدرس را وارد کنید")]
[StringLength(500, ErrorMessage = "آدرس نمی‌تواند بیشتر از 500 کاراکتر باشد")]
[Display(Name = "آدرس")]
public string Address { get; set; }

public IFormFile NationalCardImageFile { get; set; }
}
< /code>
Моя модель: < /p>
public class Patient
{
[Key]
public int Id { get; set; }

[Required(ErrorMessage = "لطفاً نام و نام خانوادگی را وارد کنید")]
[Display(Name = "نام و نام خانوادگی")]
[StringLength(100, ErrorMessage = "نام کامل نمی‌تواند بیشتر از 100 کاراکتر باشد")]
public string FullName { get; set; }

[Required(ErrorMessage = "لطفاً شماره تماس را وارد کنید")]
[Display(Name = "شماره تماس")]
[Phone(ErrorMessage = "شماره تماس وارد شده معتبر نیست")]
public string PrimaryPhoneNumber { get; set; }

[Display(Name = "شماره تماس دوم")]
[Phone(ErrorMessage = "شماره تماس دوم معتبر نیست")]
[Required(ErrorMessage = "لطفاً شماره تماس دوم را وارد کنید")]
public string SecondaryPhoneNumber { get; set; }

[Required(ErrorMessage = "لطفاً کد ملی را وارد کنید")]
[Display(Name = "کد ملی")]
[StringLength(10, MinimumLength = 10, ErrorMessage = "کد ملی باید دقیقاً 10 رقم باشد")]
public string NationalCode { get; set; }

[Display(Name = "تصویر کارت ملی")]
[Required(ErrorMessage = "لطفاً تصویر کارت ملی را وارد کنید")]
public string NationalCardImagePath { get; set; }

[Display(Name = "آدرس")]
[StringLength(500, ErrorMessage = "آدرس نمی‌تواند بیشتر از 500 کاراکتر باشد")]
[Required(ErrorMessage = "لطفاً آدرس را وارد کنید")]
public string Address { get; set; }

[Display(Name = "رمز عبور")]
[Required(ErrorMessage = "لطفاً رمز عبور را وارد کنید")]
[StringLength(100, MinimumLength = 6, ErrorMessage = "رمز عبور باید حداقل 6 کاراکتر باشد")]
[DataType(DataType.Password)]
public string Password { get; set; }

// 📌 فیلدهای مربوط به ورود با کد تأیید
[Display(Name = "تأیید شماره موبایل")]
public bool IsPhoneVerified { get; set; } = false;

[Display(Name = "کد تأیید")]
public string PhoneVerificationCode { get; set; }

[Display(Name = "تاریخ انقضای کد تأیید")]
public DateTime? PhoneVerificationExpiry { get; set; }

// 📌 فیلدهای سیستمی
[Display(Name = "تاریخ ثبت")]
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;

[Display(Name = "تاریخ آخرین بروزرسانی")]
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;

[Display(Name = "آخرین ورود")]
public DateTime? LastLoginAt { get; set; }
}
< /code>
Мой контроллер: < /p>
[HttpGet]
public async Task CompleteInfo()
{
int? userId = HttpContext.Session.GetInt32("UserId");
if (userId == null)
return RedirectToAction("Login", "Account", new { area = "" });

var patient = await _context.Patients.FindAsync(userId);

if (patient == null)
return RedirectToAction("Login", "Account", new { area = "" });

if (!patient.IsPhoneVerified)
{
// شماره تلفن تایید نشده، ریدایرکت یا نمایش پیام مناسب
return RedirectToAction("Index", "Dashboard", new { area = "PatientPanel" });
}

// مقداردهی اولیه مدل فقط برای فیلدهای تکمیل اطلاعات
var model = new PatientEditInfoViewModel
{
SecondaryPhoneNumber = string.IsNullOrWhiteSpace(patient.SecondaryPhoneNumber) ? "" : patient.SecondaryPhoneNumber,
NationalCode = string.IsNullOrWhiteSpace(patient.NationalCode) ? "" : patient.NationalCode,
NationalCardImagePath = string.IsNullOrWhiteSpace(patient.NationalCardImagePath) ? "" : patient.NationalCardImagePath,
Address = string.IsNullOrWhiteSpace(patient.Address) ? "" : patient.Address
};

return View(model);
}

[HttpPost]
public async Task CompleteInfo(PatientEditInfoViewModel model)
{
if (!ModelState.IsValid)
return View(model);

var userId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value);
var patient = await _context.Patients.FindAsync(userId);

if (patient == null)
return RedirectToAction("Login", "Account");

// فقط فیلدهایی که توی ویو مدل داریم آپدیت میشن
patient.SecondaryPhoneNumber = model.SecondaryPhoneNumber;
patient.NationalCode = model.NationalCode;
patient.Address = model.Address;

if (model.NationalCardImageFile != null)
{
var uploadsFolder = Path.Combine(_hostEnvironment.WebRootPath, "img/national-card");
Directory.CreateDirectory(uploadsFolder);
var uniqueFileName = $"{Guid.NewGuid()}_{model.NationalCardImageFile.FileName}";
var filePath = Path.Combine(uploadsFolder, uniqueFileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
await model.NationalCardImageFile.CopyToAsync(stream);
}
patient.NationalCardImagePath = $"/img/national-card/{uniqueFileName}";
}

patient.UpdatedAt = DateTime.UtcNow;
_context.Patients.Update(patient);
await _context.SaveChangesAsync();

TempData["SuccessMessage"] = "اطلاعات شما با موفقیت ثبت شد";
return RedirectToAction("Dashboard");
}
< /code>
my view: < /p>
@using installments_Payment.Core.ViewModels
@model PatientEditInfoViewModel



تکمیل اطلاعات کاربری

@if (TempData["ErrorMessage"] != null)
{

@TempData["ErrorMessage"]

}

@if (TempData["SuccessMessage"] != null)
{

}





















ثبت اطلاعات
برگشت به پنل






@section Scripts {

}
< /code>
Я работаю над проектом MVC Core ASP.NET, где у меня есть субъект пациента с несколькими полями, включая поле изображения для загрузки изображения профиля. У меня есть форма редактирования, в которой я заполняю все поля и отправляю ее, но после публикации изменения не появляются в базе данных (таблица пациентов). < /P>
Я подозреваю, что проблема может быть связана с обработкой загрузки изображения. Я не реализовал загрузки изображений в ядро ASP.NET в течение долгого времени, поэтому я мог бы что -то упустить в контроллере или представлении. Попробуйте редактировать без загрузки нового изображения, ничего не меняется в таблице.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... n-n-fields
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»