Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定模型属性的HtmlHelper。流畅接口_C#_Asp.net_Asp.net Mvc 3_Html Helper - Fatal编程技术网

C# 绑定模型属性的HtmlHelper。流畅接口

C# 绑定模型属性的HtmlHelper。流畅接口,c#,asp.net,asp.net-mvc-3,html-helper,C#,Asp.net,Asp.net Mvc 3,Html Helper,我想创建一个HtmlHelper扩展方法,允许您设置模型实例,然后绑定此模型的属性以呈现一些html 这将遵循与Telerik网格相似的模式 在下面的示例中,我们将模型设置为网格的DataContext。 然后声明一些列。对于每个列,它们都会绑定一个与模型相关的属性,即IEnumerable。因此,当网格渲染行时,相应的属性将从该行的模型实例绑定 @(Html.Telerik().Grid(Model) .Name("Grid") .Columns(columns

我想创建一个HtmlHelper扩展方法,允许您设置模型实例,然后绑定此模型的属性以呈现一些html

这将遵循与Telerik网格相似的模式

在下面的示例中,我们将
模型设置为网格的DataContext。
然后声明一些列。对于每个列,它们都会绑定一个与模型相关的属性,即
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
看起来像这样:

public class MyObj
{
    public bool IsRegistered { get; set;}
    public string Name { get; set; }
}
@(Html.MyHelpers().MyList(Model)
                  .ControlOne.Bound(o => o.IsRegistered)
                  .ControlTwo.Bound(o => o.Name)
)
我想在视图中调用一个htmlhelper,它将呈现我的列表,如下所示:

public class MyObj
{
    public bool IsRegistered { get; set;}
    public string Name { get; set; }
}
@(Html.MyHelpers().MyList(Model)
                  .ControlOne.Bound(o => o.IsRegistered)
                  .ControlTwo.Bound(o => o.Name)
)
我还没有尝试过很多,老实说,我不知道如何实现这一点。因此,我将张贴更新,因为这将是一个正在进行的工作。但是,如果有任何想法或建议,我将不胜感激。我知道我可以使用网格,但是这个助手的重量会更轻,因为我不需要太多的功能,也不想为了这个目的在telerik网格上拖拉

谢谢

这篇文章可能会帮助您编写强类型的HtmlHelper扩展

有关问题:


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

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

ASP.NET MVC 3 RTM的源代码如下:

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

关键是,您已经可以使用
Html.DisplayForModel()
为模型的每个属性呈现控件,并且您可以通过查看源代码来查看它是如何完成的,因此您可以轻松地对其进行调整

还有
EditorExtensions.cs
,它包含
Html.EditorForModel()
,提供编辑版本


ASP.NET MVC最重要的一点是,您可以将它的任何部分替换掉,然后编写自己的,这样您就可以实现几乎所有的功能。

这正是我需要的一个示例,可以让它正常工作。谢谢+1.