1

jquery ui datepickerを使用して、日付ピッカーの強い型のhtmlヘルパー拡張機能を作成しようとしています。強く型付けされていない拡張機能を作成しましたが、これは機能しますが、現在、強く型付けされた拡張機能を作成しようとしています。

これが私が持っているものです:

public static MvcHtmlString DatePicker(this HtmlHelper html, string name, object date)
    {
        var inputTag = new TagBuilder("input");
        inputTag.MergeAttribute("id", name);
        inputTag.MergeAttribute("name", name);
        inputTag.MergeAttribute("type", "text");

        if (date != null)
        {
            string dateValue = String.Empty;
            if ((date is DateTime? ||date is DateTime) && (DateTime)date != DateTime.MinValue)
            {
                dateValue = ((DateTime)date).ToShortDateString();
            }
            else if (date is string)
            {
                dateValue = (string)date;
            }

            inputTag.MergeAttribute("value", dateValue);
        }

        return MvcHtmlString.Create(inputTag.ToString());
    }

これは機能し、値を保持します。これが私の強く型付けされた拡張機能のために持っているものです。

public static MvcHtmlString DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) where TModel : class
    {
        Func<TModel, TProperty> myFunc = expression.Compile();
        var value = myFunc(???);

        var inputName = ExpressionHelper.GetExpressionText(expression);
        return htmlHelper.DatePicker(inputName, value);
    }

これは、値にnullを渡した場合(value = null)に機能しますが、編集時に、日付ピッカーに値が入力されません。

モデルからDatePickerFor拡張メソッドの値を取得するにはどうすればよいですか。(私は別のパラメーターで値を渡すことができることを知っていますが、私はしたくないです。さらに、これは非常に興味深いです)

ありがとうケビン

--編集------最終結果として私が持っているもの----------注:これは完全にはテストされていませんが、現在は機能しているようです。

public static MvcHtmlString DatePicker(this HtmlHelper html, string name, object date)
    {
        var inputTag = new TagBuilder("input");
        inputTag.MergeAttribute("id", name);
        inputTag.MergeAttribute("name", name);
        inputTag.MergeAttribute("type", "text");
        inputTag.AddCssClass("jqueryDatePicker");

        if (date != null)
        {
            string dateValue = String.Empty;
            if ((date is DateTime? ||date is DateTime) && (DateTime)date != DateTime.MinValue)
            {
                dateValue = ((DateTime)date).ToShortDateString();
            }
            else if (date is string)
            {
                dateValue = (string)date;
            }

            inputTag.MergeAttribute("value", dateValue);
        }

        return MvcHtmlString.Create(inputTag.ToString());
    }

    public static MvcHtmlString DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) where TModel : class
    {
        Func<TModel, TProperty> methodCall = expression.Compile();
        TProperty value = methodCall(htmlHelper.ViewData.Model);
        var inputName = ExpressionHelper.GetExpressionText(expression);

        return htmlHelper.DatePicker(inputName, value);
    }

これは、JQueryUIのdatepickerスクリプトを使用しています。「jqueryDatePicker」とは何ですか。なぜクラスとして追加されるのですか。各ページに$(#...)。datepicker()を呼び出す代わりに、このクラスを追加すると、このクラスを見つけて.datepicker()を呼び出すjavascriptがいくつかあります。

4

1 に答える 1

0

次のようなものが機能するはずです。

var input = myFunc(htmlHelper.ViewData.Model)
于 2010-07-20T18:40:48.860 に答える