我们一直试图让编辑器模板与动态属性一起工作 - 无济于事。也许你们中的一个人可以帮助我们。Asp.Net MVC 3动态属性编辑器
这里大致是我们班:
public class Criterion
{
...
public string Text { get; set; }
public dynamic Value { get; set; }
public Type Type { get; set; }
...
}
我们的Razor视图得到一个模型方含区间的列表,每个包含在其标准的列表。 (我们在运行时得到这些相关信息)。所有这些标准应在编辑模式显示 - 对于他们的实际类型:(节选)
@for (int i = 0; i < model.Sections.Count(); i++)
{
for (int j = 0; j < model.Sections[i].Criteria.Count(); j++)
{
var criterion = model.Sections[i].Criteria[j];
var type = criterion.Type.Name;
var name = "Sections[" + i + "].Criteria[" + j + "].Value";
var criterionDisplayName = criterion.Text;
<label for="[email protected](i)[email protected](j)__Value">@criterionDisplayName</label>
@Html.Editor(name, type)
}
}
这并显示例如一个复选框正确的,但它不使用值正确设置复选框状态(如果criterion.Value为true,则检查)。其他类型也一样,例如ints
。 (它会在POST请求后正确填写表单,但这是因为MVC使用临时模型来重新创建用户输入。)
尽管我们已经尝试和研究过了:是否可以使用编辑器模板属性类型dynamic
?如果是的话 - 我们如何才能使它工作? (我们不希望根据可能的类型来辨别,我们希望MVC框架能够根据实际类型使用正确的编辑器模板。)
它适用于强类型视图。我试图改变索引视图不使用强类型视图:删除了@ @模型IList'并使用了@ @ var模型=(IList )模型; }'。然后我尝试'@ Html.Editor(“model [”+ i +“] .Value”,“Criterion_”+ model [i] .Value.GetType()。Name)',但它给了我一个错误 - _The model传入字典的项目为空,但是此字典需要类型为'System.Int32'的非空模型项目._我在做什么错误?调试告诉我,在Index-View中GetType()。Name是'Int32'。 –
toni
2012-07-16 14:27:55
顺便说一句 - 我们需要使用非强类型的视图,因为我们使用的是第三方框架(来自Orchard的ContentShape)。 – toni 2012-07-16 14:33:04
我们用'object'结束了上面的Darins方法。我们只需转换动态ViewModel并将其传递给强类型编辑器模板。谢谢Darin,宝贵的意见。 – toni 2012-07-19 14:38:34