我是Knockoutjs的新手。我刚刚经历Live examples。
有人可以告诉我如何在Knockoutjs中访问asp.net服务器端代码。
假设我有以下代码asp.net并希望填充
的helloWorld
和
列表
到Knockoutjs。
string helloWorld = "Hello world";
List<string> list = new List<string>();
list.Add("US");
list.Add("UK");
list.Add("Canada");
答案 0 :(得分:1)
你不能吗?您需要将服务器端变量作为对客户端的响应(本例中的浏览器)发送回来
如果您正在使用RESTful WCF / MVC / Web API,那么您是否阅读了很多关于DataContracts?的内容。您还可以使用SignalR向客户端发送消息。
无论采用何种技术,您都无法绑定存储在服务器内存中的变量
答案 1 :(得分:0)
我正在使用DataContractJsonSerializer
(来自System.Runtime.Serialization.dll
)。
您可以编写实用程序类来封装逻辑,例如:
public class JavaScriptStringSerializer {
public string SerializeString<T>(T value) {
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
byte[] buffer;
using (MemoryStream stream = new MemoryStream())
{
serializer.WriteObject(stream, value);
buffer = stream.ToArray();
}
return Encoding.UTF8.GetString(buffer);
}
public T DeserializeString<T>(string value) {
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
T result;
byte[] buffer = Encoding.UTF8.GetBytes(value);
using (MemoryStream stream = new MemoryStream(buffer, false)) {
result = (T)serializer.ReadObject(stream);
}
return result;
}
}
然后在.aspx页面声明文字像
<script type="text/javascript">
$(function () {
var oData = <asp:Literal ID="litServerModel" runat="server" Mode="PassThrough" />;
// do something with oData - like bind viewmodel, etc
});
</script>
在代码隐藏中:
var serializer = new JavaScriptStringSerializer();
litServerModel.Text = serializer.SerializeString<List<string>>(new List<string> {
"aa",
"bb",
"cc"
});
对于更复杂的对象,您必须使用DataContract
/ DataMember
属性正确装饰它们,例如:
[DataContract]
public class Point {
[DataMember]
public int X { get; set; }
[DataMember]
public int Y { get; set; }
}
litServerModel.Text = serializer.SerializeString<Point>(new Point {
X = 1,
Y = 2
});