我想创建一个HtmlHelper扩展方法,允许您设置模型实例,然后绑定此模型的属性以呈现一些html。
这将遵循与Telerik Grid相近的类似模式。
在下面的示例中,我们看到我们将Model
设置为Grid的DataContext。
然后声明一些列。 Foreach列,它们绑定了一个属性IEnumerable
的属性。因此,当网格呈现行时,相应的属性将从该行的模型实例绑定。
@(Html.Telerik().Grid(Model)
.Name("Grid")
.Columns(columns =>
{
columns.Bound(o => o.OrderID).Width(100);
columns.Bound(o => o.ContactName).Width(200);
columns.Bound(o => o.ShipAddress);
columns.Bound(o => o.OrderDate).Format("{0:MM/dd/yyyy}").Width(120);
})
.Scrollable(scrolling => scrolling.Enabled((bool)ViewData["scrolling"]))
.Sortable(sorting => sorting.Enabled((bool)ViewData["sorting"]))
)
基本上,我想了解如何实现Bound
方法。对于我的场景,模型也将是IEnumerable
。所以我要说我的模型是List<MyObj>
为了论证,MyObj
看起来像这样:
public class MyObj
{
public bool IsRegistered { get; set;}
public string Name { get; set; }
}
我想最终在视图中调用一个htmlhelper来渲染我的列表并看起来像这样:
@(Html.MyHelpers().MyList(Model)
.ControlOne.Bound(o => o.IsRegistered)
.ControlTwo.Bound(o => o.Name)
)
我还没有尝试过很多,说实话我不知道如何实现这一点。所以我将发布更新,因为这将是一项正在进行的工作。但是,如果有任何想法或建议,我将不胜感激。我知道我可以使用网格,但是这个帮助器的重量会更轻,因为我不需要很多功能,也不想为此目的在telerik网格中拖动。
谢谢!
答案 0 :(得分:1)
http://publicvoidlife.blogspot.com/2011/02/htmlhelper-extensions.html这篇文章可能会帮助您编写强类型的HtmlHelper扩展。
相关问题:
Is it possible to create a custom ASP.NET MVC strongly typed HTML Helper?
您可能想查看一些开源项目,例如mvccontrib和djme
答案 1 :(得分:0)
您是否看过Html.DisplayForModel()
的源代码(因为ASP.NET MVC是开源的)?也许它会给你一些线索。
ASP.NET MVC 3 RTM的源代码在这里:http://aspnet.codeplex.com/releases/view/58781
您需要查看的位是DisplayExtensions.cs
中的TemplateHelpers.cs
和mvc3-rtm-sources\mvc3\src\SystemWebMvc\Mvc\Html
关键是你已经可以使用Html.DisplayForModel()
为模型的每个属性渲染一个控件,你可以通过查看源代码看看它是如何完成的,这样你就可以轻松调整它。
还有EditorExtensions.cs
,其中包含Html.EditorForModel()
,可为您提供编辑版本。
ASP.NET MVC的重要之处在于你可以换掉它的任何部分并编写自己的部分,这样你几乎可以实现任何目标。