2014-01-13 35 views
0

我工作的一个项目,每一个文本框,在视图中我有休耕我怎么能叫@ Html.TextBoxFor在cs文件

<div class="field-box"> 
    <label>Titlu</label> 
    <div class="col-md-7"> 
     @Html.TextBoxFor(model => model.Name, new { @class = "form-control inline-input" }) 
    </div> 
    @Html.ValidationMessageFor(model => model.Name) 
</div> 

我想写一个自定义的助手即会输出这个给我,但我不知道如何调用@ Html.TextBoxFor当我不在视图中。

任何帮助,非常感谢。 感谢

更新 我发现这Using HtmlHelper in a Controller,但它看起来很可怕,必须有一个更好的办法

+2

有没有其他办法直。你为什么需要从后端调用它?如果你需要在视图之外调用它,你可能会错误地使用某种方法。 – Karhgath

+0

@Karhgath,因为我不知道更好的方法来缩短我粘贴的HTML或找到一种方法来保存它重用它。这是要复制粘贴。我在大约20个地方使用不同的变量 – trebor

回答

6

像这样:

public static class CustomHtmlHelper { 

    public static MvcHtmlString MyFieldBox<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression, String title) { 

     StringBuilder sb = new StringBuilder(); 
     sb.AppendLine("<div class=\"field-box\">"); 
     sb.AppendLine("<div class=\"field-box">\"); 
     sb.AppendLine("<label>{0}</label>", title); 
     sb.AppendLine("<div class=\"col-md-7\">"); 
     sb.AppendLine(htmlHelper.TextBoxFor(expression, new { @class = "form-control inline-input" })); 
     sb.AppendLine("</div>"); 
     sb.AppendLine(htmlHelper.ValidationMessageFor(expression); 
     sb.AppendLine("</div>"); 
     return new MvcHtmlString(sb.ToString()); 
    } 

} 

用法:

<%= Html.MyFieldBox(m => m.Name, "Name") %> 
+0

正是我在找什么,必须纠正一个视图错误给你更新并标记为正确的。 – trebor

+0

我不能为我的生活导入我需要的表达式>表达式编译可以请你帮忙。据说,它不能解决TProperty,如果有一个导入,我错了,我不知道哪个。谢谢 – trebor

+1

你需要一个在函数定义中,我刚刚添加了这个,现在试试吧...... –

1

,如果这是只有一个视图内使用的另一种选择,是使用剃刀的HtmlHelper语法。

您定义的助手这样的:

@helper MyTextBoxFor(System.Linq.Expressions.Expression<Func<ViewModelType, object>> expression) 
{ 
    <div class="field-box"> 
     <label>Titlu</label> 
     <div class="col-md-7"> 
      @Html.TextBoxFor(expression, new { @class = "form-control inline-input" }) 
     </div> 
     @Html.ValidationMessageFor(expression) 
    </div> 
} 

,然后用它是这样的:

@MyTextBoxFor(m => m.Name) 
+0

感谢您的帮助,已经标记为另一个正确。这个帮助器可以在我的整个项目中使用吗,还是仅在它定义的视图中可用? – trebor

+1

只是一个视图。可能有某种方法可以通过将其放置在布局中进行分享,我不确定。即使你做了,但最大的局限是它不支持泛型...所以它只适用于单视图模型。我认为,当你在同一视图中使用同一个片段时,它确实非常有用。 –

+1

以下是分享方式:http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx但在这种情况下,仍然缺乏通用支持限制了它的有用性。 –

0

您可以尝试编辑模板是否适合你

+0

你好,如果编辑模板与t4模板相同,他们不是我想要的方式,如果他们有不同的东西,请提供链接 – trebor

+0

HI Toby。 1)在视图下添加视图 - >共享 - > EditorTemplates 3)将视图命名为与您的Viewmodel/Model相同(创建新的ViewModel/Model让我们说personNameVM为这个HTML内容并使用@model添加它) 3)就是这样,无论你在哪里,都可以使用该模板作为@ html.EditorFor(m => m.personNameVM) – DeepakKhetwal