5

我想知道如何编写 HTML Helper,@Html.TextBoxFor(model => model.signature)以便data-id在生成的输入中包含参数,如下所示。

<input type="text" name="signature"  data-id="No Signature" />

注 1:参数 likedataId是工作的,htmlAttributes因为它是一个简单的变量。

注2:我知道扩展方法和使用属性,如@{var attributes = new Dictionary<string, object>{{ "data-id", "No Signature" }};}

我觉得必须有更好的方法来解决这个问题。任何想法...?

非常感谢。

4

3 回答 3

4

您可以通过以下方式添加data-属性:

@Html.TextBoxFor(model => model.signature, new { data_id = "No signature" })

您必须使用下划线 ( _) 代替破折号 ( -)。

提示:也可以在属性中使用Model变量:data-

new { data_id = Model.Id }
于 2013-09-27T11:13:22.137 回答
1

您可以创建自己的自定义助手,例如:

 public static class TextBoxExtensions
     {
          public static string CustomTextBox(this HtmlHelper helper, string name)
          {
               return String.Format("<input type='text' name={0} data-id='No Signature'></input>", name);
          }
     }

然后在您的视图中您可以执行以下操作:

@Html.CustomTextBox("signature");
于 2013-09-27T10:45:50.797 回答
-2

下面的代码将通过扩展 TextBoxFor 创建一个 CustomTextBoxFor 助手。这使您可以充分利用 MVC 的验证约定,同时打开 htmlAttributes 参数,以便可以根据需要附加更多属性。

        public static MvcHtmlString CustomTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
            Expression<Func<TModel, TProperty>> expression, string customData)
        {
            return htmlHelper.CustomTextBoxFor(expression, customData, (IDictionary<string, object>)null);
        }

        public static MvcHtmlString CustomTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
           Expression<Func<TModel, TProperty>> expression, string customData, object htmlAttributes)
        {
            IDictionary<string, object> attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
            attributes.Add("data-custom", customData);
            return htmlHelper.TextBoxFor(expression, new { data_custom = "customData" });
        }

用法:

@Html.CustomTextBoxFor(model => model.MyProperty, Model.CustomData)
@Html.CustomTextBoxFor(model => model.MyProperty, Model.CustomData, new { @class="pretty"})    
于 2013-10-04T16:55:36.867 回答