我编写的一小段代码在我通过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>
}
答案 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>