绑定模型Propertys的HtmlHelper。流畅的界面

时间:2011-06-28 20:41:08

标签: c# asp.net asp.net-mvc-3 html-helper

我想创建一个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网格中拖动。

谢谢!

2 个答案:

答案 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?

您可能想查看一些开源项目,例如mvccontribdjme

答案 1 :(得分:0)

您是否看过Html.DisplayForModel()的源代码(因为ASP.NET MVC是开源的)?也许它会给你一些线索。

ASP.NET MVC 3 RTM的源代码在这里:http://aspnet.codeplex.com/releases/view/58781

您需要查看的位是DisplayExtensions.cs中的TemplateHelpers.csmvc3-rtm-sources\mvc3\src\SystemWebMvc\Mvc\Html

关键是你已经可以使用Html.DisplayForModel()为模型的每个属性渲染一个控件,你可以通过查看源代码看看它是如何完成的,这样你就可以轻松调整它。

还有EditorExtensions.cs,其中包含Html.EditorForModel(),可为您提供编辑版本。

ASP.NET MVC的重要之处在于你可以换掉它的任何部分并编写自己的部分,这样你几乎可以实现任何目标。