ASP.Net MVC实体框架提交模型,然后在编辑页面中打开新模型

Joo*_*osh 1 c# asp.net-mvc

我有一个提交模型的表单.控制器将该模型保存到数据库,然后创建新模型并返回具有该新模型的EditCreate视图.

我遇到的问题是没有显示新模型.而是显示刚刚发布的模型.我通过调试器跟踪它到视图并看到值是新的,但是当页面显示时,它显示刚刚提交的所有旧值.

调节器

[HttpPost]
public ActionResult AddProduct(MyEntityModel myModel)
{
    // Save
    if (myModel.ID != 0) {
        Update(myModel);
    } else {
        Add(myModel);
    }

    ModelState.Clear(); // This fixed it

    // Show page for new model
    MyEntityModel newModel = new MyEntityModel();
    newModel.ID = 0;

    // Edit/Create page
    ActionResult ret = EditCreateRow(newModel);

    return ret;
}
Run Code Online (Sandbox Code Playgroud)

模型

public partial class STM_AuditData
{
    public int ID { get; set; }
    public Nullable<System.DateTime> ServiceDate { get; set; }
    public string Product { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

视图

@Html.LabelFor(model => model.ServiceDate)
@Html.EditorFor(model => model.ServiceDate)
@Html.LabelFor(model => model.Product)
@Html.EditorFor(model => model.Product)
@Html.HiddenFor(model => model.AuditID)
Run Code Online (Sandbox Code Playgroud)

我该怎么做以确保正确的模型显示?谢谢.

这是EditCreateRow的代码

public ActionResult EditCreateRow(MyEntityModel row)
{
    MyEntityModel.IntsToBools(ref row);

    EditCreate_SetViewBagItems(row);

    return View("~/Views/MyEntityModel/EditCreate.cshtml", row);
}
Run Code Online (Sandbox Code Playgroud)

小智 5

这种情况的原因是HtmlHelper的工作原理.在HTML元素中设置值时,使用IValueProvider的实现,它有几个选项来获取值.您可以在aspnetwebstack上查看默认列表.与更好的MVC框架相比,ASP.NET MVC是违反直觉的.

如果你添加

ModelState.Clear()
Run Code Online (Sandbox Code Playgroud)

回来之前,我想你可能已经解决了.