C# 如何在.cs文件中调用@Html.TextBoxFor
我正在为视图中的每个文本框处理一个项目,我有空闲时间C# 如何在.cs文件中调用@Html.TextBoxFor,c#,asp.net,.net,asp.net-mvc,C#,Asp.net,.net,Asp.net Mvc,我正在为视图中的每个文本框处理一个项目,我有空闲时间 <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.V
<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(model=>model.Name,新的{@class=“表单控件内联输入”})
@Html.ValidationMessageFor(model=>model.Name)
我想写一个自定义的帮助程序来为我输出这个,但是我不知道当我不在视图中时如何调用@Html.TextBoxFor
非常感谢您的帮助。
谢谢
更新
我发现了这个,但看起来很糟糕,必须有更好的方法
但是,如前所述,
HtmlHelper类用于生成UI。不应在控制器或模型中使用
像这样:
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() );
}
}
公共静态类CustomHtmlHelper{
公共静态MvcHtmlString MyFieldBox(此HtmlHelper html、表达式、字符串标题){
StringBuilder sb=新的StringBuilder();
某人加上一行(“”);
某人以“\”号结尾;
sb.附录(“{0}”,标题);
某人加上一行(“”);
AppendLine(htmlHelper.TextBoxFor(expression,new{@class=“formcontrolinlineinput”}));
某人加上一行(“”);
sb.AppendLine(htmlHelper.ValidationMessageFor(表达式);
某人加上一行(“”);
返回新的MvcHtmlString(sb.ToString());
}
}
用法:
<%= Html.MyFieldBox( m => m.Name, "Name" ) %>
m.Name,“Name”)%%>
如果仅在一个视图中使用,另一个选项是使用razor 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)
如果编辑器模板适合您,您可以尝试使用它没有其他直接方法。为什么需要从后端调用此功能?如果您需要在视图之外调用它,您可能会走错方向。@Karhgath因为我不知道有什么更好的方法来缩短我粘贴的html,或者找到一种方法来保存它并重新使用它。复制粘贴太多了。我在20个地方有不同的变量,这正是我要找的,必须纠正一个视图错误,给你更新后的,并将其标记为正确。我一生都无法导入我需要的,使表达式编译的东西。你能帮我吗。它说它不能解决TProperty,如果有一个导入我弄错了,我不知道是哪个。谢谢你在函数定义中需要a,我只是添加了这个,现在试试它……J.J.GBBB谢谢你错过了。Dai-Hi,你能考虑回答这个问题吗?这可以用类似的方法来处理你在这里提到的,在这里我想使用模型的2个属性而不是整个表达式,如果您想将格式转换为与此处答案更相似的格式,那么应该可以,或者更好,+1在此处,感谢您的帮助,已经将另一个标记为正确。这个助手是在我的整个项目中可用,还是仅在定义它的视图中可用?仅在一个视图中可用。我不确定,也许有办法把它放在一个布局中共享。即使你这样做了,最大的限制是它不支持泛型。。。因此,它只适用于单视图模型。我认为,只有在同一个视图中使用相同的代码片段时,它才真正有用。以下是您可以共享它的方式:但在这种情况下,缺乏通用支持限制了它的有用性。您好,如果编辑器模板与t4模板相同,它们不是我想要的方式,如果它们有不同之处,请提供一个linkHI Toby。1) 在Views->Shared->EditorTemplates下添加视图2)将视图命名为与Viewmodel/Model相同的视图(为这个HTML内容创建新的Viewmodel/Model,比如personNameVM,并使用@Model添加它)3)就是这样,在任何需要的地方使用该模板@HTML.EditorFor(m=>m.personNameVM)