【发布时间】:2018-05-20 12:50:02
【问题描述】:
我很难确定这是否只是一个设计问题和/或如何从编码角度解决以下情况:
在我的项目中,我允许用户添加多个送货地址。显然,其中之一应该是送货地址。但是,我想提供由用户自行决定更改此设置的可能性。 因此,我使用名为“IsDefaultShippingAddress”(布尔)的列存储了送货地址。我想做的是,当用户选择送货地址作为默认地址时,模型将为该列传递“true”。
现在,如果用户有一个现有的送货地址被选为默认地址,并想添加一个新的默认送货地址(或将现有送货地址提升为默认地址),我自然会以同一个用户在同一个表中有两个(多个)记录的场景,其中“IsDefaultShippingAddress”为“true” - 但我希望它只是一个地址(最新提升的地址),根据术语“默认”的性质。
因此我的问题是,如何确保所有符合特定条件(用户 ID)的记录都更新为 'IsDefaultShippingAddress' 'false',而新提升的送货地址(同一张表中的单独行)被设置为 @ 987654322@?
这是我的控制器代码,这是未解决问题的代码:
// POST: /Manage/EditShippingAddress
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult EditShippingAddress([Bind(Include = "ID,UserID,IsDefaultShippingAddress,ShippingAddressCompanyName,ShippingAddressFirstName,ShippingAddressLastName,ShippingAddressAdditional,ShippingAddressStreet,ShippingAddressNumber,ShippingAddressZIP,ShippingAddressCity,ShippingAddressState,ShippingAddressCountry,ShippingInstructions,UpdatedLatitude,UpdatedLongitude,UpdatedLocation")] ShippingAddresses model)
{
// define variables
var userID = User.Identity.GetUserId();
DateTime nowUTC = DateTime.Now.ToUniversalTime();
DateTime nowLocal = DateTime.Now.ToLocalTime();
// pass first name to viewbag for personalization
ViewBag.Personalization = UserManager.FindById(userID).FirstName.ToString();
if (ModelState.IsValid)
{
DATADB.Entry(model).State = System.Data.Entity.EntityState.Modified;
DATADB.SaveChanges();
return RedirectToAction("ShippingAddresses");
}
return View(model);
}
【问题讨论】:
标签: asp.net-mvc entity-framework controller