为什么我在 MVC3 控制器内的模型中更新的值未在客户端上呈现?

2024-04-18

我有一个控制器动作UpdateCustomer(CustomerDto customer)返回一个PartialViewResult其模型也是CustomerDto:

[HttpPost]
public PartialViewResult UpdateCustomer(CustomerDto customer)
{
    CustomerDto updatedCustomer = _customerService.UpdateCustomer(customer);
    updatedCustomer.Name = "NotThePostedName";
    return PartialView("CustomerData", updatedCustomer);
}

在我看来,我有以下几行:

@Html.TextBoxFor(model => model.Name)

到目前为止,一切都很好。在我看来,我对此操作方法进行了异步发布,模型绑定器完成其工作,并且我可以更新数据库中的客户。然后我想渲染updated客户对客户。例如,我想更改控制器中的客户名称。然而,渲染出来的是always发布的属性customer,不是来自的属性updatedCustomer.

我决定将 MVC3 源代码包含在我的项目中,看看到底发生了什么。这似乎是 MVC3 的一个功能(bug?),它总是从中获取值ViewData.ModelState而不是来自的值ViewData.Model.

这发生在第 366-367 行System.Web.Mvc.Html.InputExtensions:

string attemptedValue =
    (string) htmlHelper.GetModelStateValue(fullName, typeof(string));
tagBuilder.MergeAttribute("value",
    attemptedValue ?? ((useViewData)
        ? htmlHelper.EvalString(fullName)
        : valueParameter), isExplicitValue);

如你看到的,attemptedValue来自ModelState。它包含旧值CustomerDto.Name(发布到控制器操作的值)。

如果这是一个功能,为什么它会这样工作?有没有办法解决这个问题?我希望如果我更新模型,则会渲染更新,而不是我发布的旧值。


是的,这是一个功能(模型状态总是在实际模型之前检查),您可以清除模型状态,或者只更新您需要的值:

ModelState["Name"].Value = updatedCustomer.Name;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我在 MVC3 控制器内的模型中更新的值未在客户端上呈现? 的相关文章

随机推荐

  • 从 Facelets 错误页面引用 CDI 托管 bean

    我很难尝试让通用错误页面在使用 JSF 2 Facelets 和 CDI 的 非常简单的 WAR 项目中工作 我的应用程序服务器是 WebLogic 12c 它应该支持所有这些开箱即用的功能 但它无法显示错误页面 当我将完全相同的 WAR
  • 监控 AppFabric 缓存

    我在 3 台服务器 AppFabric 1 1 上设置了高度可用的 AppFabric 缓存 我想监视每台服务器上的本地缓存 如果它因任何原因而关闭 则将其启动备份 Problem 问题是权限 我编写了一个 Powershell 脚本来执行
  • 从 php 中的日期时间获取年/月/日?

    I used date w timestamp and date w timestamp 要知道这一天 date n timestamp 几个月等 现在我正在使用日期时间 我想知道从日期时间获取一天 一个月等的等效函数是什么 PS 我知道我
  • ServiceBus RetryExponential 属性含义

    我很难理解与 QueueClients 结合使用的 RetryExponential 类 我也假设 SubscriptionClients 属性已列出here http msdn microsoft com en us library wi
  • Grails:当我向 message.properties 添加新属性时出现 Native2ascii 错误

    当我在运行时向 grails 应用程序中的 message properties 文件添加新属性时 出现了一个奇怪的错误 当我通过命令行重新启动应用程序或重新启动STS时 此错误消失 我使用的是 2 0 1 版本 直到一周前 我还能够在运行
  • 向 WooCommerce 单一产品页面添加多个选项卡

    我正在尝试向 WooCommerce 添加三个自定义选项卡 我有下面的代码 其中两个显示 但由于某种原因 属性描述选项卡没有显示在页面上 不仅 数量定价 选项卡不显示其描述 我尝试将代码的不同部分移动到不同的位置 并且检查了代码是否有错误或
  • 如何使用 ggplot 显示多个显示分布的箱线图

    我正在尝试获取这样的图表来显示每个年龄组的箱线图分布 But instead my plot looks like this 如何显示箱线图而不是点 为什么我的 Y 轴不是数字 My data looks like this 这是我正在尝试
  • DPI 意识真的需要吗?

    我正在学习如何使用 GDI GDI 绘制 GUI 我发现了这个http msdn microsoft com en us library windows desktop dd756596 v vs 85 aspx step 2 declar
  • 如何删除系统命名空间中的 kubernetes pod(和其他资源)

    我错误地在系统命名空间 kube system 中添加了一个 pod 然后我无法删除这个 Pod 它似乎还创建了一个副本集 每次删除这些项目时 都会重新创建它们 似乎找不到删除属于系统命名空间 kube system 的 Pod 或副本集的
  • 连接关闭且应用程序终止后,BLE 堆栈反复重新连接到外设

    我有一个应用程序 它打开与 BLE 设备的短暂连接 执行一些特征读取和写入 然后断开并关闭连接 应用程序使用 autoReconnect false 并且设备未配对或绑定 我看到 Android 的一些非常奇怪的行为 它似乎反复且意外地重新
  • 从用户控件内部将选项卡添加到选项卡控件

    如何从选项卡本身包含的另一个用户控件将选项卡添加到一个用户控件中存在的选项卡控件 我可以在不将 tabcontrol 作为构造函数中的参数传递的情况下 也许通过某种静态全局方法 来完成此操作吗 我试过了 public static Obse
  • Android的ARGB_8888位图内部格式总是RGBA吗?

    我正在尝试创建一个Bitmap在 Android 中使用Bitmap Config ARGB 8888在我从外部源收到字节后 据我所知 在 a 中设置原始字节的最快方法Bitmap 不使用JNI 是通过使用copyPixelsFromBuf
  • 无法使用 Java 删除文件夹

    我试图删除一个只有文件但没有子文件夹的文件夹 但没有成功 Code File rowFolder new File folderPath String files rowFolder list for String file files F
  • pkg-config 无法在 ffmpeg 构建上找到库(linux)

    我正在尝试在 ubuntu 上为 android 构建 ffmpeg I ve cross compiled all the dependencies I need for my configuration I ve set up the
  • .NET6 中具有优先级队列的 Parallel.ForEach

    我正在尝试奔跑Parallel ForEach on my Priority Queue但我收到以下错误 严重性代码 说明 项目文件行抑制状态 错误 CS0411 无法从用法推断方法 Parallel ForEach OrderablePa
  • 如何在地图视图中隐藏“当前位置”标注

    点击代表用户位置的脉动蓝色圆圈会弹出 当前位置 标注 有办法抑制吗 更新用户位置后 您可以更改注释视图上的一个属性 void mapView MKMapView mapView didUpdateUserLocation MKUserLoc
  • 创建新用户时 ActiveModel::ForbiddenAttributesError

    我在 Ruby 中有这个模型 但它抛出了一个ActiveModel ForbiddenAttributesError class User lt ActiveRecord Base attr accessor password valida
  • 如何创建嵌套 GridView 来编辑 EF Code First 关系?

    我有一个经典的父子关系 我想使用它来进行 CRUDasp GridView控制 对父级进行 CRUD 很容易 但挑战在于嵌套一个asp GridView在一个asp GridView这能够对儿童关系产生作用 为了使问题变得更容易 我构建了一
  • 从 Eclipse 返回已删除的项目

    我有严重的问题 我已经从 Eclipse 中删除了 Java 项目 并且 CVS 上没有新的修订版 有没有机会归还那个项目或者我是najebao Eclipse 管理文件和项目 http www cs umd edu class winte
  • 为什么我在 MVC3 控制器内的模型中更新的值未在客户端上呈现?

    我有一个控制器动作UpdateCustomer CustomerDto customer 返回一个PartialViewResult其模型也是CustomerDto HttpPost public PartialViewResult Upd