EditorFor HTML Helper with knockout

Chr*_*ill 5 asp.net-mvc html-helper knockout.js

我认为拥有一个扩展版本的EditorFor HTML帮助器非常有用,它可以自动为Knockout JS写出值数据绑定.

这将是客户端视图模型和服务器端视图模型相同的地方 - 我已经通过使用ko映射并通过AJAX获取viewmodel来自动生成客户端视图模型.

有没有其他人尝试这样的事情,或者是否有任何项目包括类似于我在这里的想法?

这样做的好处是,在重构时,不会有错过数据绑定值的危险.

Cha*_*upt 3

我们已经沿着这些思路做了一些事情,它远非完美,并且我们在自定义扩展中还有更多内容,但我提取了本质。

using System.Web.Mvc.Html;

namespace System.Web.Mvc
{
    public static class EditorForExtensions
    {
        public static MvcHtmlString TextBoxForViewModel<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
        {
            ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

            var htmlAttributes = HtmlAttributesForKnockout(metadata);

            return htmlHelper.TextBoxFor(expression, htmlAttributes);
        }

       private static Dictionary<string, object> HtmlAttributesForKnockout(ModelMetadata metadata)
        {
            var htmlAttributes = new Dictionary<string, object>();

            var knockoutParameter = String.Format("value: {0}", metadata.PropertyName);

            htmlAttributes.Add("data-bind", knockoutParameter);

            return htmlAttributes;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后可以这样使用:

@Html.TextBoxForViewModel(m => m.Name)
Run Code Online (Sandbox Code Playgroud)