Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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# 如何在.cs文件中调用@Html.TextBoxFor_C#_Asp.net_.net_Asp.net Mvc - Fatal编程技术网

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)