HtmlHelper里面有HtmlHelper

时间:2014-08-22 14:43:03

标签: html asp.net-mvc html-helper

是否可以为已经使用了另一个htmlherlper的部分制作HtmlHelper。

像这种情况一样:

   <div class="control-group">
   @Html.LabelFor(model => model.cLinks.Link2Privates)
   <div class="controls">
   @Html.TextBoxFor(model => model.cLinks.Link2Privates, new { @class = " span7"})
   @Html.ValidationMessageFor(model => model.cLinks.Link2Privates)
   </div>
</div>  

2 个答案:

答案 0 :(得分:0)

我假设你只是想要一个能为你生成所有这些信息的助手。虽然技术上可以创建一个自定义帮助程序,但实际上最好使用编辑器模板:

<强>视图\共享\ EditorTemplates \ BootstrapControlGroup.cshtml

<div class="control-group">
    @Html.Label("")
    <div class="controls">
        @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = " span7"})
        @Html.ValidationMessage("")
    </div>
</div>

<强>表格

@Html.EditorFor(m => m.cLinks.Link2Privates, "BootstrapControlGroup")

这基本上就是说使用这个模板来渲染这个属性的“编辑器”。如果您不想指定模板名称,还有其他方法。您可以使用UIHint属性

来装饰您的媒体资源
[UIHint("BoostrapControlGroup")]
public string Link2Privates { get; set; }

或者您可以依赖特定的C#类型或DataType。例如,如果您希望以这种方式处理所有string,则可以将该模板命名为String.cshtml,然后执行:

@Html.EditorFor(m => m.cLinks.Link2Privates)

Razor会看到它是string并自动使用String.cshtml编辑器模板(如果存在)。您还可以使用DataType属性,例如:

[DataType(DataType.EmailAddress)]
public string Email { get; set; }

然后,创建一个Views\Shared\EditorTemplates\EmailAddress.cshtml模板。只要您为此属性调用Html.EditorFor,Razor就会使用此模板。

答案 1 :(得分:0)

我创建了一个适用于Twitter Bootstrap场景的HtmlHelper扩展库。

http://buildmvc.codeplex.com

Twitter Bootstrap Form Groups甚至还有一个HtmlHelper插件:

https://www.nuget.org/packages/Build.Mvc.TwitterBootstrap

@using ( Html.BuildForm().Begin(FormRenderStyle.Horizontal) )
{
    Html.UpdateFormBuilderContext(ctx =>
    {
      ctx.RenderValidationMessages = true;
    });

    <fieldset>
       <legend>User Information</legend>

       @Html.BuildTextBoxGroupFor(m => m.FirstName, b=> b.TextBox(t=> t.Autofocus()))
       @Html.BuildTextBoxGroupFor(m => m.Nickname)
       @Html.BuildTextBoxGroupFor(m => m.LastName)
    </fieldset>
}

注意:图书馆希望您使用TwitterBootstrap&gt; V3。上面的例子有2.3.2版的类名。