2010-01-23 44 views
16

Tôi đã tự hỏi liệu có thể tạo một Trình trợ giúp HTML được đánh máy mạnh mẽ trong ASP.NET MVC 2 không? Tạo một trình trợ giúp thường xuyên (đọc không được đánh máy mạnh) là đơn giản nhưng tôi gặp khó khăn khi tạo các phiên bản được nhập mạnh mẽ. Ví dụ: tôi muốn tạo một trình trợ giúp html DatePickerFor ...Có thể tạo ra một ASP.NET MVC tùy chỉnh mạnh mẽ đánh máy trợ giúp HTML?

Bất kỳ hướng dẫn hoặc đoạn trích nào sẽ được đánh giá rất cao, Cảm ơn bạn trước! JP

Trả lời

14

Ok, tôi đã tìm ra (và nó khá đơn giản ...). Đăng một trong những tình trạng quá tải của tôi trong trường hợp bất kỳ ai khác rơi vào câu hỏi này.

public static string DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel, TProperty>> expression) 
    where TModel : class 
{ 
    var inputName = ExpressionHelper.GetExpressionText(expression); 
    return htmlHelper.DatePicker(inputName); 
} 
+2

@JP làm cách nào để bạn nhận được giá trị? ví dụ. html.DatePicker (x => x.Date), làm thế nào để bạn nhận được giá trị x.Date – Omu

1
public static string DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel, TProperty>> expression) 
    where TModel : class 
{ 
    ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); 
    return htmlHelper.DatePicker(metadata.PropertyName); 
} 

tôi đã sử dụng ModelMetadata này cũng sẽ làm việc nếu bạn tạo một mẫu datetime cho datepicker.

+0

Tài khoản này có phải là 'html.DatePickerFor (m => m.User.Birthday)'? (Nhiều cấp độ của dereferencing?) Có vẻ như thành viên '.PropertyName' sẽ chỉ trả lại tên gần đây nhất, và không nên sử dụng tất cả các cấp? –

4

Tôi vừa thử những điều sau đây để tạo một trình trợ giúp CKEditor được đánh máy mạnh mẽ và dường như nó hoạt động hoàn hảo. Điều này giả định rằng bạn đã bao gồm jquery và các kịch bản lệnh ckeditor cần thiết trong dự án của bạn. Nó có thể là tốt đẹp để xem xét cũng thiết lập cấu hình ckeditor quá, nhưng điều này hài lòng nhu cầu hiện tại của tôi.

public static MvcHtmlString CkEditor(this HtmlHelper htmlHelper, string name, string value, object htmlAttributes) 
    { 
     var output = htmlHelper.TextArea(name, value, htmlAttributes).ToString(); 
     output += string.Format("<script type=\"text/javascript\">$(document).ready(function(){{ $('#{0}').ckeditor(); }});</script>", name); 

     return MvcHtmlString.Create(output); 
    } 

    public static MvcHtmlString CkEditor(this HtmlHelper htmlHelper, string name, string value) 
    { 
     return htmlHelper.CkEditor(name, value, null); 
    } 

    public static MvcHtmlString CkEditorFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes) where TModel : class 
    { 
     ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); 
     return htmlHelper.CkEditor(metadata.PropertyName, metadata.Model as string, htmlAttributes); 
    } 

    public static MvcHtmlString CkEditorFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) where TModel : class 
    { 
     return htmlHelper.CkEditorFor(expression, null); 
    } 
Các vấn đề liên quan