C# 带包装器的自定义文本框Asp.net MVC帮助程序

C# 带包装器的自定义文本框Asp.net MVC帮助程序,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我想创建我自己的TextBox助手,它可以做一件简单的事情:用一些div和标签包装输入元素,如下所示: <div class="col-xs-12"> <label>field name</label> <div> <input id='myId' name='MyName' type='text' value='myValue'> </div> </div> public static M

我想创建我自己的TextBox助手,它可以做一件简单的事情:用一些div和标签包装输入元素,如下所示:

<div class="col-xs-12">
  <label>field name</label>
  <div>
    <input id='myId' name='MyName' type='text' value='myValue'>
  </div>
</div>
public static MvcHtmlString CliTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string LabelText, object htmlAttributes)
    {
        var baseFormat = htmlHelper.TextBoxFor(expression, format: null, htmlAttributes: htmlAttributes);
        var errors = htmlHelper.ValidationMessageFor(expression, "", new { @class = "text-danger" }).ToString();

        if (!string.IsNullOrEmpty(errors))
            errors = "<div>" + errors + "</div>";

        var wrap = String.Format(
            "<div class='col-xs-12'>" +
            "<label>{0}</label>" +
            "<div>{1}</div>"+
            "{2}" +
            "</div>", LabelText, baseFormat.ToString(), errors);

        return new MvcHtmlString(wrap);
    }
我该怎么做?有没有一种方法可以在我的助手中调用基类


更新:更好的解决方案 在Krishina回答之后,我得到了一个更好的方法,使用如下代码:

<div class="col-xs-12">
  <label>field name</label>
  <div>
    <input id='myId' name='MyName' type='text' value='myValue'>
  </div>
</div>
public static MvcHtmlString CliTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string LabelText, object htmlAttributes)
    {
        var baseFormat = htmlHelper.TextBoxFor(expression, format: null, htmlAttributes: htmlAttributes);
        var errors = htmlHelper.ValidationMessageFor(expression, "", new { @class = "text-danger" }).ToString();

        if (!string.IsNullOrEmpty(errors))
            errors = "<div>" + errors + "</div>";

        var wrap = String.Format(
            "<div class='col-xs-12'>" +
            "<label>{0}</label>" +
            "<div>{1}</div>"+
            "{2}" +
            "</div>", LabelText, baseFormat.ToString(), errors);

        return new MvcHtmlString(wrap);
    }
public static MvcHtmlString CliTextBoxFor(此HtmlHelper HtmlHelper、表达式表达式、字符串标签文本、对象htmlAttributes)
{
var baseFormat=htmlHelper.TextBoxFor(表达式,格式:null,htmlAttributes:htmlAttributes);
var errors=htmlHelper.ValidationMessageFor(表达式“”,new{@class=“text danger”}).ToString();
如果(!string.IsNullOrEmpty(错误))
错误=“错误+”;
var wrap=String.Format(
"" +
"{0}" +
"{1}"+
"{2}" +
“”,LabelText,baseFormat.ToString(),错误);
返回新的MvcHtmlString(换行);
}

通过这种方式,我一直使用TextBoxFor来生成基本输入元素。

您需要为您的textbox创建一个自定义Html帮助程序,如下所示

namespace MvcApplication.Helpers
{
    public static class TextboxExtensions
    {
        public static HtmlString CustomTextBox(this HtmlHelper helper, string labelName, NameValueCollection parameters)
        {
            var returnValue = string.Empty;
            if (parameters == null || parameters.Count <= 0) return new HtmlString(returnValue);

            var attributes = parameters.AllKeys.Aggregate("", (current, key) => current + (key + "=" + "'" + parameters[key] + "' "));

            returnValue = String.Format("<div class='col-xs-12'><label>{0}</label>" +
                                        "<div><input " + attributes + "></div></div>", labelName);

            return new HtmlString(returnValue);
        }
    }
}
namespace mvcapapplication.Helpers
{
公共静态类TextboxExtensions
{
公共静态HtmlString CustomTextBox(此HtmlHelper帮助程序、字符串labelName、NameValueCollection参数)
{
var returnValue=string.Empty;
if(parameters==null | | parameters.Count current+(key+“=”+“+””“+parameters[key]+”);
returnValue=String.Format(“{0}”+
“”,标签名);
返回新的HtmlString(返回值);
}
}
}
要使用上述扩展方法,请执行以下步骤

在MVC视图中,在顶部编写using语句

@使用mvcapapplication.Helpers

然后,编写Html帮助程序,如下所示

@Html.CustomTextBox(“名称”,新名称值集合{{{“id”,“myId”},{“value”,“myValue”}})


注意:您可以使用json或其他类型而不是NameValueCollection。

但是我需要用div等来包装输入元素。@paulo-我已经更新了答案。。看一看。您需要一个自定义扩展方法。您可以创建自己的扩展方法,使用内置的html帮助程序方法。