asp.net-mvc - 在 TryUpdateModel 之前更新值提供程序

标签 asp.net-mvc modelstate

假设我们有一个名为 PetsName 的属性的类。如果它在屏幕上留空,我想更新值提供者,因此如果用户没有输入宠物名称,我们会强制使用“未命名”。这不是实际情况.. 这当然是一个示例,因此诸如“仅在网页上设置默认值等”之类的答案不适合这种情况:)

主要问题是我们想要更新值,因此当您更新模型时,它将使用您覆盖的任何内容。我想一个想法是删除该值并添加它。当我检查 ModelState 时,它​​确实有更新的值,但是当我调用 TryUpdateModel 时,该值没有更新。我在下面所做的可能确实是正确的,这里还有另一个问题,但我想我会先尝试一下。谢谢!

    //Sample case:

    [HttpPost]
    public ActionResult Edit(PetOwner petOwner)
    {

    //If pets name is not set, force to "Unknown"
    if(petOwner.PetsName=="")
    {
    //Tried this too ModelState.Remove("PetsName");
    //ModelState.Add("PetsName", new ModelState());
    ModelState["PetsName"].Value = new ValueProviderResult("Unnamed", "Unnamed", CultureInfo.CurrentCulture);
    }

    //Get the record/relationships from DB to merge with ModelState
    PetOwner petOwnerToSave = from o in ctx.PetOwners where o.PetOwnerId == petOwner.PetOwnerId select o;

    TryUpdateModel(petOwnerToSave);

    //Save petOwnerToSave
    }

最佳答案

幕后真正的问题是 Html.HiddenFor 没有显示正确的值,即使 TryUpdateModel 正在更新模型中的值以提供给 View 。

这里的问题是 Html 助手假设如果您在发布后呈现 View ,则一定存在错误(否则您将使用 GET 方法重定向回 View - 因此出现 Post Redirect Get 问题)

这在以下位置有详细描述:
http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx

关于asp.net-mvc - 在 TryUpdateModel 之前更新值提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3544663/

相关文章:

javascript - 在 ASP.NET MVC 中的 javascript 函数中设置字符串给出 NullReferenceException

c# - 回发后 TextBoxFor 不刷新

c# - 将密码存储在 cookie 中是否安全?

asp.net-mvc - ASP.NET MVC4 ModelState.IsValid 对于 double 值是假的

asp.net-mvc - 在 ASP.NET MVC 中是否有删除 ModelState 错误的强命名方法

asp.net-mvc-4 - ModelState.IsValid == false,尽管插入了所有模型值

c# - ViewData 未传递到 ASP.NET Core 2.1 中的布局

javascript - 使用jquery单击选择时如何刷新下拉菜单?

asp.net-mvc - 将 ModelState 错误复制到 TempData 并在 View 中显示它们

modelstate - 没有 Entity Framework 的asp.net mvc