我正在使用ASP.NET MVC,并且需要在运行时根据用户选择创建新视图.这些视图一旦创建,就需要保存在存储中,以便可以重复使用.我更喜欢这些视图是强类型的.当然,每个新视图的模型类都不存在,并且这些类将根据用户创建的内容具有新属性.
例如,如果用户选择了一个文本框并希望它用于firstname,那么最终我希望使用名为FirstName的公共属性动态创建一个类……依此类推.一切都是在飞行中创造的.
我想知道如何处理这个问题. Dynamic Source Code Generation and Compilation是否适用于此工作流程,或者这会使它更加复杂吗?
更新:
一个用例是,是否需要根据用户对数据库表的选择来创建表单.如果有数百个表,我将不会创建数百个视图.我知道我可以在这个例子中使用gridview,但对于所有情况,动态视图更合适.
解决方法
您的用户选择是数据,而不是代码:
>根据用户选择创建数据结构.
>将它们保存在数据库中以供日后使用.
>编写一个视图,该视图采用这些数据结构(作为模型)并显示它们.
> EditorTemplates可用于显示每个单独的控件,使用强类型视图.
数据
public class Page { public List<Control> Controls { get; set; } } public class TextBox : Control { public string Label { get; set; } public string Value { get; set; } }
Page.cshtml
@model Page @for (int i 0; i < Model.Controls.Count; i++) { // Render using the EditorTemplate view for the control's type @Html.EditorFor(m => m.Controls[i]) }
EditorTemplates / TextBox.cshtml
@model TextBox @Html.HiddenFor(m => m.ControlId) @Html.LabelFor(m => m.Value,Model.Label) @Html.TextBoxFor(m => m.Value)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。