【问题标题】:ASP.NET MVC - Dynamic Class AttributesASP.NET MVC - 动态类属性
【发布时间】:2011-08-11 17:25:47
【问题描述】:

我正在尝试解决以下问题。我有一个存储数据的基类,比如说一个人。 创建新人员时,只有其中一些详细信息将通过表单填写,即名字、姓氏。当这个人被保存到数据库时,它也会被分配一个 ID。

Class Person
    Public Property ID As Integer
    Public Property Firstname As String
    Public Property Lastname As String
    Public Property Age As Integer
    Public Property Location As String
    Public Property Gender As String

我还有一个名为 Task 的类,它将控制一个人剩余属性的输入。 将任务分配给用户并要求他们完成 Person 类的单个属性。

Class Task
    Public Property ID As Integer
    Public Property ParentPerson As Person
    Public Property AssignedUser As User
    Public Property Attribute As String

我想知道如何才能最好地实现打开任务、加载属性的文本框然后将其保存回数据库的能力?

提前致谢!

【问题讨论】:

  • 您到底有什么问题?我不能告诉你理解什么,也不了解 MVC,所以我不确定如何帮助你。看看你到目前为止所做的尝试会很有用。
  • 我一直在我的控制器中使用非常标准的 Create 方法。我不确定如何仅渲染一个控件并将该数据以最佳方式保存回模型中。我不想为控制器中的每个可能的属性编写一个 IF 语句以传递给视图。 IE。 IF Task.Attribute = "Firstname" Then Do something to pass to the view 我必须写很多代码,因为会有很多属性。我通常会通过编写 Person.Firstname = 'xx' 来设置属性值。如何将字符串 Task.Attribute 与 Person 类的“属性”相关联?

标签: asp.net-mvc class dynamic-attributes


【解决方案1】:

听起来您的问题与 MVC 无关,听起来您正在寻找一种方法来获取给定匹配字符串名称的属性名称。

我相信还有其他方法可以做到这一点,但我知道的一种方法是反思。警告:我一直被告知反射是缓慢且危险的,除非必要,否则不应使用。

Type t = typeof(Person);
FieldInfo f = t.getField(Task.Attribute);
string oldValue = (string) f.GetValue(person); //gets old string given Person person
f.SetValue(person, "xx"); // sets value of person.Take.Attribute to "xx"

也许你的数据模型这样会更好

Class Person
    Public Property ID As Integer
    Public Property Attributes As List<PersonAttribute>

Class PersonAttribute
    Public Property Id as String //FirstName, LastName, etc
    Public Property Value as String
    Public Property DisplayName as String //if you need some label for html pages

然后您可以通过 id == Task.Attribute 上的 where 查询来获取您想要的 PersonAttribute

请参阅http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/ 或搜索编辑器模板,了解如何将复杂列表绑定到 mvc 中的控制器。

【讨论】:

  • 这不完全是 MVC 问题,但我正在使用 MVC 并且需要达到预期的结果。感谢您对反思的提醒,我现在正在阅读它,我想我将能够实现我想要的!您已经注意到反射有一些缺点。是否有更好的方法可以设计我的应用程序以在不反思的情况下达到相同的结果?感谢您的建议!
  • @Tom 在我的回答中编辑了一个建议。
  • 感谢您的额外建议。我实际上一直在考虑这种方法,并且已经开始对每种方法进行两个示例实现。我对 PersonAttribute 类的犹豫/未知是我有一个必须在应用程序之外完成的报告元素。我可以遍历属性集合以构建报告和列,但我想这将比具有定义列等的普通数据集花费更多的精力。感谢到目前为止的帮助,我很感激有机会提出想法有人!
猜你喜欢
  • 2011-06-16
  • 2023-03-26
  • 1970-01-01
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多