2

HtmlHelper を拡張する単純なメソッドを作成しました..基本的には TextBoxFor メソッドですが、目的に合わせて少しカスタマイズされています..とにかく..HtmlHelper が新しい { @attributename = "attributevalue" } を使用する方法だと思いますHTML要素の属性を作成することは本当に素晴らしいです..だから私の質問は..どうすれば同じことができるでしょうか?

ビューコード:

@Html.DaisyTextBoxFor(model => model.Text, new { @class="asd" })

ヘルパーコード:

    public static MvcHtmlString DaisyTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IDictionary<string,object> attributes = null)
    {
        var value = ((PropertyViewModelProperty)htmlHelper.ViewData.Model.GetType().GetProperty(ExpressionHelper.GetExpressionText(expression)).GetValue(htmlHelper.ViewData.Model, null)).Value;

        return MvcHtmlString.Create(String.Format("<input name=\"{0}\" value=\"{1}\" />", CreateForInputName(typeof(TModel), htmlHelper), value));
    }

    private static string CreateForInputName(Type model,HtmlHelper htmlHelper)
    {
        return HttpContext.Current.Server.HtmlEncode(model.AssemblyQualifiedName + "_" + htmlHelper.ViewData["propertyName"].ToString() + '_' + htmlHelper.ViewData["propertyGuid"].ToString());
    }
4

1 に答える 1

0

私はこれを試したことはありませんが、以下のことはうまくいきませんか?

public static MvcHtmlString DaisyTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IDictionary<string,object> attributes = null)
    {
        var value = ((PropertyViewModelProperty)htmlHelper.ViewData.Model.GetType().GetProperty(ExpressionHelper.GetExpressionText(expression)).GetValue(htmlHelper.ViewData.Model, null)).Value;

        return MvcHtmlString.Create(String.Format("<input name=\"{0}\" value=\"{1}\" class=\"{2}\" />", CreateForInputName(typeof(TModel), htmlHelper), value, attributes["class"]));
    }

class={2}一部に注意してくださいMvcHtmlString.Create

于 2012-11-23T23:17:48.573 に答える