【发布时间】:2019-11-17 11:33:40
【问题描述】:
我将 Customer 和所有 MembershipTypes 从 Customer Controller 发送到 Edit 视图,因为我需要两者,如果你能告诉我如何在 VIEW 中而不是在 ViewBag.Message 中发送两者 以及为什么每次我编辑项目时我的应用都会抛出错误
我的客户类与membershipType 类具有多对一的关系:
public class Customer
{
public Customer()
{
this.Movies = new HashSet<Movie>();
}
public int id { get; set; }
[Required]
[StringLength(255)]
public String Name { get; set; }
public bool IsSubscribedToNewsletter { get; set; }
public int CurrentMembershipTypeId { get; set; }
public MembershipType CurrentMembershipType { get; set;}
public ICollection<Movie> Movies { get; set; }
}
我的 MembershipType 类:
public class MembershipType
{
public int Id { get; set; }
public short SignupFee { get; set; }
public byte DurationInMonths { get; set; }
public byte DiscountRate { get; set; }
public ICollection<Customer> Customers { get; set; }
// public virtual ICollection<Movie> Movie { get; set; }
}
我的客户控制器:获取客户编辑的功能:
public ActionResult Edit(int id)
{
Customer customer = new Customer();
customer = iCustomerRepository.GetCustomerByID(id);
var membershipTypes = iMembershipTypeRepository.GetMembershipTypes();
ViewBag.Message = membershipTypes;
return View(customer);
}
客户编辑的发布操作:
[HttpPost]
public ActionResult Edit(Customer customer)
{
Customer Customer = new Customer();
Customer.id = customer.id;
Customer.Name = customer.Name;
Customer.IsSubscribedToNewsletter = customer.IsSubscribedToNewsletter;
Customer.CurrentMembershipTypeId = customer.CurrentMembershipTypeId;
iCustomerRepository.UpdateCustomer(Customer);
iCustomerRepository.Save();
return RedirectToAction("Customer");
}
客户表单编辑视图:
<form action="/Customer/Edit" method="post">
<table>
<tr>
<td>Id:</td>
<td><label for="CustomerId">ID:</label></td>
<td><input id="CustomerId" type="number" name="CustomerId" value="@Model.id" /></td>
</tr>
<tr>
<td>Name:</td>
<td><input id="CustomerName" type="text" name="CustomerName" value="@Model.Name" /></td>
</tr>
<tr>
<td>IsSubscribedToNewLetter:</td>
<td><input id="CustomerisSubscribedToNewsLetter" type="text" name="CustomerisSubscribedToNewsLetter" value="@Model.IsSubscribedToNewsletter" /></td>
</tr>
<tr>
<td>MembershipType:</td>
<td>
<select id="MembershipTypeId" name="MembershipTypeId">
@foreach (var membershipType in @ViewBag.Message)
{
<option value=@membershipType.Id>
@membershipType.Id
</option>
}
</select>
</td>
</tr>
</table>
<input type="submit" value="save" />
</form>
客户存储库类:
命名空间 WebApplication2.Repositories.CustomersRepositories
{
public class CustomerRepository : ICustomerRepository, IDisposable
{
private CustomerContext context;
public CustomerRepository(CustomerContext context)
{
this.context = context;
}
//public short GetMembershipTypeSignupFee()
//{
// var Customers = context.Customers.ToList();
// foreach (var customer in Customers)
// {
// return customer.CurrentMembershipType.SignupFee;
// }
//}
public IEnumerable<Customer> GetCustomers()
{
return context.Customers.ToList();
}
public Customer GetCustomerByID(int Id)
{
return context.Customers.Find(Id);
}
public void InsertCustomer(Customer customer)
{
context.Customers.Add(customer);
}
//public void InsertMany()
//{
// context.Customers.AddRange(context.Customers);
//}
public void DeleteCustomer(int Id)
{
Customer customer = context.Customers.Find(Id);
context.Customers.Remove(customer);
}
public void DeleteAllCustomers()
{
context.Customers.RemoveRange(context.Customers);
context.SaveChanges();
}
public void UpdateCustomer(Customer customer)
{
context.Entry(customer).State = EntityState.Modified;
}
public void Save()
{
context.SaveChanges();
}
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
context.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
}
【问题讨论】:
-
错误出现的时间和地点?它是否在更新数据库期间出现?
-
EntityValidationErrors 说什么?
-
它出现在客户存储库中 public void Save() { context.SaveChanges(); }
-
当您在检查异常时调试时发生异常时,EntityValidationErrors 属性包含什么?这些信息是解决问题的关键。
标签: c# html asp.net-mvc razor