में छोड़ करने के लिए देख किसी के लिए ऊपर चाड के जवाब देने के लिए htmlAttributes अधिभार जोड़ना चाहते थे और यह काम किया है। अन्य सभी सहायकों को इन उदाहरणों से बहुत आसानी से बनाया जा सकता है। (धन्यवाद चाड, आपके एक्सटेंशन ने नॉकआउट का उपयोग करने में अपने संक्रमण को कम करने में मदद की!)
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Web.Mvc.Html;
namespace System.Web.Mvc {
public static class KnockoutExtensions {
public static MvcHtmlString KnockoutTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) {
var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
var htmlAttributes = HtmlAttributesForKnockout(metadata);
return htmlHelper.TextBoxFor(expression, htmlAttributes);
}
public static MvcHtmlString KnockoutTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object attributes) {
// convert passed anonymous object (attributes) into IDictionary<string,object> to pass into attribute parser
var attrs = HtmlHelper.AnonymousObjectToHtmlAttributes(attributes) as IDictionary<string, object>;
var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
var htmlAttributes = HtmlAttributesForKnockout(metadata, attrs);
return htmlHelper.TextBoxFor(expression, htmlAttributes);
}
private static Dictionary<string, object> HtmlAttributesForKnockout(ModelMetadata metadata, IEnumerable<KeyValuePair<string, object>> attributes = null) {
var htmlAttributes = new Dictionary<string, object>();
var knockoutParameter = String.Format("value: {0}", metadata.PropertyName);
htmlAttributes.Add("data-bind", knockoutParameter);
if (attributes != null) foreach (var attr in attributes) htmlAttributes.Add(attr.Key, attr.Value);
return htmlAttributes;
}
}
}
स्रोत
2014-01-29 14:47:52
क्या आप http://knockoutmvc.com/ के बारे में जानते हैं? हालांकि मैंने इसके बारे में बुरी चीजें सुनाई हैं http://stackoverflow.com/questions/11618042/is-there-a-reason-i-would-use-knockout-mvc-instead-of-knockout-js। हालांकि आप शायद इससे कुछ एक्सटेंशन चुरा सकते हैं :) –
मैं उस पर एक नज़र डालेंगे –
मैंने एमवीसी 3 में इस पीठ के लिए एक समान परियोजना शुरू की, लेकिन जब हमने एकल पृष्ठ ऐप टेम्पलेट के बारे में सुना तो एमवीसी 4 में नॉकआउट एकीकरण आ रहा है। इस पर काम करना बंद कर दिया। दुर्भाग्य से, यह पूरा नहीं हुआ और हम कभी भी परियोजना पर वापस नहीं आये। अब, मुझे विश्वास है कि सुविधा एसपी 2 में लौट रही है (या वापस आ गई है)। –