DropDown不显示先前选择的内容&;已保存
本文关键字:amp 保存 显示 选择 DropDown | 更新日期: 2023-09-27 18:22:03
客户可以查看他们的客户详细信息页面,在那里他们可以更改预先记录的交货运行(如果他们也愿意的话)我有一个包含交货运行城镇的下拉列表:
<div class="editor-label">@Html.DropDownListFor(model => model.DeliveryRunList, Model.DeliveryRunList)</div>
当客户配置文件加载时,它会在下拉列表中显示正确的城镇(从数据库中读取,他们之前在注册时选择了该数据库)。
但是,如果他们更改城镇并保存,用户将返回主页,新选择的拖车将保存到DB中。但是,如果用户返回到客户配置文件页面,则下拉菜单会显示以前选择的城镇,而不是刚刚选择并保存到DB的新城镇。它是否存储在某个缓存中。
为什么它没有更新到数据库中的实际内容??
编码背后:
CustomerPart custPart = _custService.Get(custId);
if (DeliveryRunList.HasValue)
{
custPart.DeliveryRun_Id = DeliveryRunList.Value;
}
_custService.Update(custPart);
感谢
我假设model
是一个CustomerPart实例,您或多或少都是以这种方式定义它的。
public class CustomerPart
{
public int DeliveryRun_Id {get; set;}
public SelectList(or some IEnumerable) DeliveryRun_Id
}
我觉得您的代码没有更新数据库,因为您使用了错误的属性。第一个lambda表达式应该是model => model.TheAttributeYouWantToUpdate
,在本例中是DeliveryRun_Id
。
所以应该是:
@Html.DropDownListFor(model => model.DeliveryRun_Id, Model.DeliveryRunList)
而不是
@Html.DropDownListFor(model => model.DeliveryRunList, Model.DeliveryRunList)
甚至还不清楚这个代码在控制器里的哪里:
CustomerPart custPart = _custService.Get(custId);
if (DeliveryRunList.HasValue)
{
custPart.DeliveryRun_Id = DeliveryRunList.Value;
}
_custService.Update(custPart);
一种常见的方法是使用两种相同名称的方法进行编辑,一种用于HttpGet,另一种用于HttpPost,并在剃刀视图中使用@Html.BeginForm()
进行更新,而不是更新控制器中的信息。
示例:
public ActionResult Edit(int id = 0) {
InvestmentFund Fund = InvestmentFundData.GetFund(id);
return Fund == null ? (ActionResult)HttpNotFound() : View(Fund);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(InvestmentFund Fund)
{
if (ModelState.IsValid)
{
InvestmentFundData.Update(Fund);
return RedirectToAction("List");
}
return View(Fund);
}
在视图
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@* For the attributes of your model *@
@Html.LabelFor ...
@Html.EditorFor ...
@Html.ValidationMessageFor ...
<input type="Submit"m value="Save">
}