Asp.net mvc 4 MVC4型号更改未显示

Asp.net mvc 4 MVC4型号更改未显示,asp.net-mvc-4,caching,Asp.net Mvc 4,Caching,我知道你在想什么,但请听我说完 我有一个模型: public partial class DealerBudget { public int DealerBudgetID { get; set; } public int DealerID { get; set; } public int BudgetYr { get; set; } public int BudgetMonth { get; set; } public decimal Budget

我知道你在想什么,但请听我说完

我有一个模型:

    public partial class DealerBudget
{
    public int DealerBudgetID { get; set; }
    public int DealerID { get; set; }
    public int BudgetYr { get; set; }
    public int BudgetMonth { get; set; }
    public decimal BudgetAmt { get; set; }
    public bool Confirmed { get; set; }
    public short BudgetTypeID { get; set; }
}
虚拟机中有以下列表:

    public class DealerBudgetVM
{
    public List<CNHi.StMarys.ND.DBP.Web.Models.DealerBudget> YrBudget { get; set; }
}
…视图上没有任何更改。新的(已确认的)预算文本框应该被禁用,而不是

“没问题!”你说。“这家伙只需要……”

  • 使用ModelState.Clear()。试过了,没用
  • 从ModelState中删除键。试过了,没用
  • 使用Post重定向获取。尝试了它(重定向到部分和主。上面的当前代码仍在使用它)。没用
  • 清除缓存。尝试了很多很多方法和迭代。什么都没用
在Post和save之后,后续Get将所有正确保存的值发送到VM中的视图,但仍会显示旧值(即用户输入的值,确认标志=false)

如果用户随后转到另一个页面,然后返回,该页面将按预期显示

我在这里(和其他地方)看到的所有帖子都自信地宣布,上述四种解决方案中的一种可以解决这个问题。我已经浪费了一天的时间,我的头撞在墙上试图禁用一个愚蠢的文本框


还有其他想法吗?这是因为嵌套或局部视图还是其他原因?

您不需要
ModelState.Clear()(没有向
ModelState
!)添加任何内容)。视图中的循环应该是
@for(int i=0;i
您不应该覆盖
属性-使用
@Html.TextBoxFor(m=>m.YrBudget[i].BudgetAmt,“{0:0.00”}”,new{…})
设置显示格式我尝试了ModelState.Clear()在帖子中使用它后,出于绝望,在一些地方,我将在这里删除它。循环实际上在两个地方显示今年和明年,并且始终有24条记录。我将ToString更改为您的代码,它显示4个12月的位置,这就是我以前使用它的原因。哎呀,它应该是
“{0:0.00}”
(有一个额外的
在那里)。你应该使用格式化输入是的,在我回答之前,我修正了额外的“是的。它仍然给出1234.0000。这只是显示Get。Get第一次工作正常,只是在发布后没有显示更改。
        public ActionResult Add()
    {

        DealerBudgetVM result = new DealerBudgetVM(); //initialised to have all 24 months

        List<DealerBudget> dbList = db.DealerBudgets.Where(x => x.DealerID == dbp.dealerID && x.BudgetTypeID == (short)2  && (x.BudgetYr == DateTime.Now.Year || x.BudgetYr == DateTime.Now.Year + 1)).ToList();

        //use the data from the DB if it exists
        foreach (DealerBudget bud in result.YrBudget)
        {
            foreach (DealerBudget budDB in dbList)
            {
                bud.DealerID = dbp.dealerID;
                bud.BudgetTypeID = 2; //Service

                if (budDB.BudgetYr == bud.BudgetYr && budDB.BudgetMonth == bud.BudgetMonth)
                {
                    bud.DealerBudgetID = budDB.DealerBudgetID;
                    bud.BudgetAmt = budDB.BudgetAmt;
                    bud.Confirmed = budDB.Confirmed;                       
                }

            }
        }
        return PartialView(result);
    }
@for( int i = 0; i < 12; ++i)
{
        @Html.HiddenFor(model => model.YrBudget[i].DealerBudgetID)
        @Html.HiddenFor(model => model.YrBudget[i].BudgetTypeID)
        @Html.HiddenFor(model => model.YrBudget[i].DealerID)
        @Html.HiddenFor(model => model.YrBudget[i].BudgetYr)
        @Html.HiddenFor(model => model.YrBudget[i].BudgetMonth)
        @Html.HiddenFor(model => model.YrBudget[i].Confirmed)
        <div class="pure-u-1-3 pure-u-md-1-6 pure-u-lg-1-12 s-box">
            <span class="pure-u-1">@Html.DisplayFor(model => model.YrBudget[i].MonthDesc)</span>
                @Html.TextBoxFor(model => model.YrBudget[i].BudgetAmt, (Model.YrBudget[i].Confirmed == false) ? (object)new {type="number", Value=Model.YrBudget[i].BudgetAmt.ToString("0.00")} : (object)new {disabled = "disabled", Value=Model.YrBudget[i].BudgetAmt.ToString("0.00")} )
        </div>      
}
        [HttpPost]
    public ActionResult Added(DealerBudgetVM vm)
    {
        if (ModelState.IsValid)
        {
            this.ModelState.Clear();

            foreach (DealerBudget budVM in vm.YrBudget.Where(x => x.Confirmed == false && x.BudgetAmt > 0).ToList())
            {
                //If it's not in the DB, add it.
                if (budVM.DealerBudgetID == 0)
                {
                    DealerBudget budNew = new DealerBudget { BudgetYr = budVM.BudgetYr, DealerID = budVM.DealerID, BudgetMonth = budVM.BudgetMonth, BudgetTypeID = budVM.BudgetTypeID, BudgetAmt = budVM.BudgetAmt };
                    if (budNew.BudgetAmt > 0)
                    {
                        budNew.Confirmed = true;
                        budVM.Confirmed = true;
                    }
                    db.DealerBudgets.Add(budNew);
                    db.SaveChanges();
                    budVM.DealerBudgetID = budNew.DealerBudgetID;
                }
                else
                {
                    //update and confirm
                    DealerBudget budDB = db.DealerBudgets.Where(x => x.DealerBudgetID == budVM.DealerBudgetID).FirstOrDefault();
                    if (budDB == null)
                    {

                    }
                    else
                    {
                        budDB.BudgetAmt = budVM.BudgetAmt;
                        budDB.Confirmed = true;
                        db.SaveChanges();
                        budVM.Confirmed = true;
                    }

                }
            }


            return RedirectToAction("Index", "ServicePerformance");
        }
        else
        {
            return PartialView(vm);
        }
    }