0

客户可以查看他们的客户详细信息页面,他们可以在其中更改预先记录的交付运行(如果他们也愿意)我有一个包含交付运行城镇的下拉列表:

<div class="editor-label">@Html.DropDownListFor(model => model.DeliveryRunList, Model.DeliveryRunList)</div>

当客户资料加载时,它会在下拉列表中显示正确的城镇(从数据库中读取,他们之前在注册时选择了该城镇)。

但是,如果他们更改城镇并保存它,则用户将返回主页并将新选择的拖曳保存到数据库中。但是,如果用户返回到客户资料页面,下拉菜单会显示之前选择的城镇,而不是之前刚刚选择并保存到数据库中的新城镇。它是否存储在某处的缓存中。

为什么它没有更新到数据库中的实际内容?

代码隐藏:

CustomerPart custPart = _custService.Get(custId);

if (DeliveryRunList.HasValue)
{
    custPart.DeliveryRun_Id = DeliveryRunList.Value;
}

_custService.Update(custPart);

谢谢

4

1 回答 1

0

我想model是一个 CustomerPart 实例,您或多或少地以这种方式定义了它。

public class CustomerPart
{
    public int DeliveryRun_Id {get; set;}
    public SelectList(or some IEnumerable) DeliveryRun_Id
}

我觉得您的代码没有更新数据库,因为您使用了错误的属性。model => model.TheAttributeYouWantToUpdate在这种情况下,第一个 lambda 表达式应该是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()在 razor 视图中使用 a 进行更新,而不是更新控制器中的信息。

例子:

        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">
    }
于 2013-07-12T15:39:18.407 回答