KO绑定在IIS 6中不起作用

时间:2013-12-01 11:20:37

标签: asp.net-mvc knockout.js iis-6

我编写的一小段代码在我通过VS 2010进行调试时工作正常。(即使用'Visual Studio开发服务器。)

之后我更改了项目设置并在运行应用程序时单击了“使用本地IIS Web服务器”(自动创建的虚拟目录)我发现KO代码根本没有被执行。无法看到填充了默认值的文本框。

在将代码部署到IIS时,我们是否需要特别小心?

以下是我的代码。

@{
    ViewBag.Title = "Home Page";
}
<div>
    <div>
        <div>
            <label>
                Name</label>
            <input type="text" name="txtID" data-bind="value: ID" />
        </div>
        <div>
            <label>
                First Name</label>
            <input type="text" name="txtFirstName" data-bind="value: FirstName" />
        </div>
        <div>
            <label>
                Last Name</label>
            <input type="text" name="txtLastName" data-bind="value: LastName" />
        </div>
        <div>
            <label>
                Full Name</label>

            <input type="text" name="txtFullName" data-bind="value: FullName" />

        </div>
    </div>
</div>
@section scripts{
    <script src="../../Scripts/jquery-1.7.1.js" type="text/javascript"></script>
    <script src="../../Scripts/knockout-2.1.0.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function () {
            var ViewModel = function () {
                var self = this;
                self.FirstName = ko.observable("Initial Name");
                self.LastName = ko.observable("Last Name");
                self.ID = ko.observable(100);
                self.FullName = ko.computed({
                    read: function () {
                        return self.FirstName() + " " + self.LastName();
                    },
                    write: function (value) {
                        var lastIndex = value.lastIndexOf(" ");
                        if (lastIndex > 0) {
                            self.FirstName(value.substring(0, lastIndex));
                            self.LastName(value.substring(lastIndex + 1));
                        }
                    }
                });
            }
            var viewModel = new ViewModel();
            ko.applyBindings(viewModel);

            var t = function () {
                alert(viewModel.FullName());
            };
        });
    </script>
}

1 个答案:

答案 0 :(得分:3)

您的脚本引用可能已被破坏,因为它们是相对引用,您现在正在使用IIS中的虚拟目录。

您需要使用Url.Content helper method,您可以使用~指定根目录,它将处理虚拟目录并为您生成正确的网址:

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