gpt4 book ai didi

c# - 是否可以在 Controller 中使用 UpdateModel 来填充对象?

转载 作者:行者123 更新时间:2023-11-30 13:31:15 24 4
gpt4 key购买 nike

是否有可能在 MVC Controller 中有效地做这样的事情:

var vmObject = Activator.CreateInstance("A string representing the model that was posted");
//vmObject is of type object
TryUpdateModel(vmObject);// this would populate the object with the posted values, so that later on I could cast the object to strongly typed model similar to what was posted (not currently working)

//elsewhere in code (ie in a service that is injected into the controller)
var stronglyTypedVM = (MyViewModel)vmObject;//this instance would be populated with values from the controller

原因是 Controller 不知道将在编译时发布的 View 模型的类型,但注入(inject)其中的服务却知道。

到目前为止,我无法让 TryUpdateModel 处理对象(似乎没有填充任何内容)。

有没有办法从发布的值中填充这个对象?我会以完全错误的方式解决这个问题吗?谁能建议更好的方法来处理这个问题?

最佳答案

是的,我一直在使用这个技巧:

TryUpdateModel((dynamic)vmObject);

您一直遇到麻烦的原因是 TryUpdateModel 是一种通用类型的方法,它使用通用类型来确定它应该查找哪些属性。例如,如果您只想绑定(bind)在接口(interface)上声明的特定属性,这可能很有用。但是,当您在编译时只知道它是一个 object 时,它不知道可以绑定(bind)到 object 上的任何属性。

通过将对象转换为动态,您允许系统根据对象的运行时类型确定最合适的通用签名以在运行时使用。它与使用反射生成和调用自定义泛型方法签名相同,但更简洁(并且性能略好)。

关于c# - 是否可以在 Controller 中使用 UpdateModel 来填充对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23407713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com