Javascript 使用knockout.js的ASP.NET MVC4 ViewModel变更跟踪

Javascript 使用knockout.js的ASP.NET MVC4 ViewModel变更跟踪,javascript,asp.net-mvc,knockout.js,change-tracking,Javascript,Asp.net Mvc,Knockout.js,Change Tracking,我有一个页面,我想知道何时对任何字段进行了任何更改,然后我将禁用并启用保存按钮 我正在使用下面的代码,但它不起作用。有人知道我缺少什么吗 @using CirrusAdmin.Models @model MedicineModel @{ ViewBag.Title = "Update Medicine"; } <script src="@Url.Content("~/Scripts/knockout-2.1.0.js")" type="text/javascript">&l

我有一个页面,我想知道何时对任何字段进行了任何更改,然后我将禁用并启用保存按钮

我正在使用下面的代码,但它不起作用。有人知道我缺少什么吗

@using CirrusAdmin.Models
@model MedicineModel
@{
    ViewBag.Title = "Update Medicine";
}

<script src="@Url.Content("~/Scripts/knockout-2.1.0.js")" type="text/javascript"></script>

<script type="text/javascript">
    var initialData = @Html.Raw(Json.Encode(Model));

    var viewModel = {
                 item : ko.observable(initialData),
                 isDirty : ko.DirtyFlag(item)
    };

    ko.applyBindings(viewModel);
</script>


<hgroup class="title">
    <h1>@ViewBag.Title.</h1>    
</hgroup>
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary()

    <fieldset>        
        <ol>
            <li>
                @Html.LabelFor(m => m.Code)
                @Html.TextBoxFor(m => m.Code, new { data_bind= "value: Code", @readonly = "readonly" })
            </li>
            <li>
                @Html.LabelFor(m => m.Name)
                @Html.TextBoxFor(m => m.Name, new { data_bind = "value: Name" })
            </li>
            <li>
                @Html.LabelFor(m => m.GenericName)
                @Html.TextBoxFor(m => m.GenericName, new { data_bind = "value: GenericName" })
            </li>
        </ol>
    </fieldset>

    <input type="submit" data-bind="enable: isDirty" value="Save" />
}

    @section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
@使用CirrusAdmin.Models
@模型医学模型
@{
ViewBag.Title=“更新医学”;
}
var initialData=@Html.Raw(Json.Encode(Model));
var viewModel={
项目:ko.可观察(初始数据),
isDirty:ko.DirtyFlag(项目)
};
应用绑定(视图模型);
@ViewBag.Title。
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()
  • @LabelFor(m=>m.Code) @TextBoxFor(m=>m.Code,新的{data_bind=“value:Code”,@readonly=“readonly”})
  • @LabelFor(m=>m.Name) @TextBoxFor(m=>m.Name,新的{data_bind=“value:Name”})
  • @LabelFor(m=>m.GenericName) @TextBoxFor(m=>m.GenericName,new{data\u bind=“value:GenericName”})
  • } @节脚本{ @Scripts.Render(“~/bundles/jqueryval”) }
    我认为您在这个过程中应用绑定太早了。试着移动

     ko.applyBindings(viewModel);
    
    在您的表格下方(即)

    @使用(Html.BeginForm())
    {
    //你的表格代码在这里
    }
    应用绑定(视图模型);
    
    你说的“谁都不行”是什么意思?它起作用了吗?你改变了什么?DirtyFlag是一个ko插件你引用了正确的脚本文件吗?你的浏览器控制台窗口中有JS错误吗?浏览器中没有错误,只是不起作用,我不确定我是否有正确的代码。
    @using (Html.BeginForm()) 
    {
      //your form code stuff here
    }
    <script type="text/javascript">
     ko.applyBindings(viewModel);
    </script>