我做了个数据编辑页面,目前从服务器端拿到的是json字符串,我使用了jquery ui datapicker作为时间拾取器,目前的需求是在打开编辑页面的时候自动加载数据库的时间记录,有没有熟悉knockout的坛友可以助攻下实现思路?
@using (Html.BeginForm("Edit", "User", FormMethod.Post, new { @class = "form form-horizontal", @id = "form-edit", @action = "Edit", data_bind = "submit:formsubmit" }))
        {
            <div class="row cl">
                <label class="form-label col-xs-4 col-sm-2"><span class="c-red"></span>用户名:</label>
                <div class="formControls col-xs-8 col-sm-9">
                    @Html.TextBoxFor(item => item.uName, new { @readonly="true",@class = "input-text", @data_bind = "value:uName, valueUpdate: 'afterkeydown'" })
                </div>
            </div>
            <div class="row cl">
                <label class="form-label col-xs-4 col-sm-2"><span class="c-red">*</span>用户级别:</label>
                <div class="formControls col-xs-8 col-sm-9">
                    <span class="select-box">
                        @Html.DropDownListFor(item => item.uLevel, ViewBag.uLevel as IEnumerable<SelectListItem>, "--请选择--", new { @class = "select", @data_bind = "value:uLevel" })
                    </span>
                    @Html.ValidationMessageFor(item => item.uLevel, null, new { @style = "color:red;" })
                </div>
            </div>
            <div class="row cl">
                <label class="form-label col-xs-4 col-sm-2"><span class="c-red">*</span>用户类型:</label>
                <div class="formControls col-xs-8 col-sm-9">
                    <span class="select-box">
                        @Html.DropDownListFor(item => item.uType, ViewBag.uType as IEnumerable<SelectListItem>, "--请选择--", new { @class = "select", @data_bind = "value:uType" })
                    </span>
                    @Html.ValidationMessageFor(item => item.uType, null, new { @style = "color:red;" })
                </div>
            </div>
            <div class="row cl">
                <label class="form-label col-xs-4 col-sm-2"><span class="c-red">*</span>到期日期:</label>
                <div class="formControls col-xs-8 col-sm-9">
                    @Html.TextBoxFor(item=>item.exprDate,"{0:'yyyy-MM-dd'}",new { @readonly = "true", @class = "input-text" } )
                    @Html.ValidationMessageFor(item => item.exprDate, null, new { @style = "color:red;" })
                </div>
            </div>            <div class="row cl">
                <label class="form-label col-xs-4 col-sm-2"><span class="c-red">*</span>账户状态:</label>
                <div class="formControls col-xs-8 col-sm-9">
                    <span class="select-box">
                        @Html.DropDownListFor(item => item.uStatus, ViewBag.uStatus as IEnumerable<SelectListItem>, "--请选择--", new { @class = "select", @data_bind = "value:uStatus" })
                    </span>
                    @Html.ValidationMessageFor(item => item.uStatus, null, new { @style = "color:red;" })
                </div>
            </div>
            <div class="row cl">
                <div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-2">
                    <button click="javascript: void(0);" class="btn btn-primary radius" type="submit"><i class="Hui-iconfont">&#xe632;</i> 提交</button>
                    &nbsp;&nbsp;&nbsp;&nbsp;
                    <button click="javascript: void(0);" class="btn btn-secondary radius" type="reset"><i class="Hui-iconfont">&#xe632;</i> 重置</button>
                </div>
            </div>
        }

解决方案 »

  1.   

    knockout 的日期数据弄进隐藏域里面,datapicker 在选取日期的事件里面给 模型赋值,这样隐藏域就有值了。post以后服务器就拿到了。knockout  跟jquery 插件交互的套路差不多都这样,除非这个控件有knockout 扩展。
      

  2.   

    服务器端传递到视图的数据是json数据,我的日期选择控件放在一个textbox中,作为一个数据编辑页面,假设textbox用value绑定监控属性,那么编辑页面加载的时候textbox中的值将是一个json的时间字符串,并不是格式化的日期,如果我绑定的是通过viewmodel属性运算过后得到的一个数据,那么post之后应该是不会更新viewmodel。
    我需要实现的功能是:
    1、编辑页面加载时,日期字段的文本框显示的是格式化日期(数据源于服务器端)
    2、当时间选择器更改时间时,以json字符串方式post后服务器端可以接收到时间控件的值
      

  3.   

    @winner2050 我最近才开始研究knockout,你说到的这种操作思路可以详细展开描述下么
      

  4.   

    双向绑定的情况下,input值的改变会自动同步到所绑定的js对象里面,如果控件和knockout有冲突,LZ不妨考虑从控件出发,比如使用控件的回调函数 保持用户操作的值和js模型对象里面的值统一,相反的,除了使用js框架的绑定方式外,不建议从“如何处理html元素的值”去考虑处理数据,因为mvvm模式下,我们总是在操作js对象