【发布时间】:2015-02-19 11:38:02
【问题描述】:
如何为动态属性创建表单?
所以我知道这是动态获取对象属性的方式:
ObjectName.GetType().GetProperty("nameofproperty")
如何在表格中包含以上内容?我试过这样做:
//loop through objects in model
@Html.CheckBoxFor(model => m.ElementAt(i).Person.GetType().GetProperty("isAvailable"), new { @class = "person-avail" })
在模型中,我将 Person 定义为这样的属性:
public Person Person { get; set; }
而且 Person 类有它自己的属性(我要为其创建表单的属性):
public class Person
{
public String name {get; set;}
public bool isAvailable {get; set;}
.
.
. etc
}
所以现在:
@Html.CheckBoxFor(model => m.ElementAt(i).Person.GetType().GetProperty("isAvailable"), new { @class = "person-avail" })
给我一个例外说:
Cannot implicitly convert type 'System.Reflection.PropertyInfo' to 'bool'
我了解问题所在,但我该如何解决呢?
【问题讨论】:
-
这个问题可能对stackoverflow.com/questions/1196991/…有帮助
-
@MattC 谢谢,但我已经想出了如何动态获取属性信息。问题是,当我创建表单时,我还不知道某个属性的值是多少 - 所以我的问题是如何将上述内容集成到表单中。
-
@MattC 如何从表单中添加用户输入?它只会得到它的当前值。
-
你试过了吗 - @Html.CheckBoxFor(model => m.ElementAt(i).Person.GetType().GetProperty("isAvailable").GetValue(m.ElementAt(i) .Person), new { @class= "person-avail" })
-
哦,好的,我明白了,您希望对来自网络表单的动态属性进行读写。如果您最初设置了值,那么当表单回发到控制器时,复选框中的值应该在发回的 Person Model 对象中。