Я создаю веб-приложение на основе ASP.Net MVC 5 (C #) и застрял на проверке определенного типа. По сути, у меня есть 5 моделей, чьи объекты я включил в модель представления. Одна из этих пяти моделей включена в список в виде модели. Поскольку эти модели имеют отношение между ними, внешние ключи реализованы, и я аннотировал внешние ключи как Обязательные, потому что они должны быть там.
Сценарий
Модельные классы:
Клиент - клиенты в приложении
AddressOf - адрес объектов недвижимости и клиентов
ClientPhone - Телефоны Клиентов - имеет внешний ключ Клиента
ClientEmail - электронные письма Клиентов - имеет внешний ключ Клиента
Консультант - Консультанты по работе с клиентами в системе управления
Теперь у меня есть поля в View.cshtml для объекта клиента, объекта адреса, ClientPhone, ClientEmail и выпадающего списка для консультанта. Исключая поле для ClientPhone.ClientCNIC и ClientEmail.ClientCNIC, которые являются внешними ключами и будут введены в контроллер, когда я введу данные в таблицу клиентов. ClientCNIC имеет поле в View.cshtml, но оно происходит из таблицы клиента. Поскольку поле ClientCNIC (внешний ключ) в ClientPhone и ClientEmail имеет аннотацию [Обязательно], в ней отображается ошибка проверки.
То, что я хочу - это присвоить значение поля, созданного для Client.ClientCNIC, атрибутам ClientPhone.ClientCNIC и ClientEmail.ClientCNIC.
Заранее спасибо!
Контроллер
[HttpPost]
public ActionResult Save(ClientFormViewModel clientFormViewModel)
{
if (ModelState.IsValid)
{
ViewBag.error = "";
var Client = clientFormViewModel.Client;
var Email = clientFormViewModel.ClientEmail;
var Address = clientFormViewModel.AddressOf;
var phone = clientFormViewModel.ClientPhone;
_context.addressof.Add(Address);
_context.SaveChanges();
Client.addressofId = _context.addressof.Select(e => e.addressofId).Max();
_context.Clients.Add(Client);
try
{
_context.SaveChanges();
}
catch (DbUpdateException)
{
_context.addressof.Remove(Client.AddressOf);
_context.SaveChanges();
ViewBag.Duplicate = "Duplicate Client";
clientFormViewModel.Consultants = _context.Consultants.ToList();
return View("ClientForm", clientFormViewModel);
}
phone.ClientCNIC = Client.ClientCNIC;
phone.PrimaryPhone = true;
_context.ClientPhone.Add(phone);
Email.ClientCNIC = Client.ClientCNIC;
Email.PrimaryEmail = true;
_context.clientemail.Add(Email);
_context.SaveChanges();
return Content("Successful!");
}
ViewBag.error = "Has Error";
clientFormViewModel.Consultants = _context.Consultants.ToList();
return View("ClientForm", clientFormViewModel);
}
public ActionResult New()
{
ViewBag.Type = "New Client";
var address = new AddressOf();
var client = new Client();
var phone = new ClientPhone();
var email = new ClientEmail();
var viewModel = new ClientFormViewModel()
{
Client = client,
ClientPhone = phone,
ClientEmail = email,
AddressOf = address,
Consultants = _context.Consultants.ToList()
};
viewModel.ClientEmail.ClientCNIC = viewModel.Client.ClientCNIC;
viewModel.ClientPhone.ClientCNIC = viewModel.Client.ClientCNIC;
return View("ClientForm", viewModel);
}
ClientPhone - Класс модели - Та же структура, что и у ClientEmail
namespace ITCMS4
{
using System;
using System.Collections.Generic;
[Table("ClientPhones")]
public partial class ClientPhone
{
[Key] public int ClientPhoneId { get; set; }
[Required] public string Phone { get; set; }
[Required] public bool PrimaryPhone { get; set; }
[Display(Name = "Client"), ForeignKey("Client")] public string ClientCNIC { get; set; }
public virtual Client Client { get; set; }
}
}