我将把一个变量从asp.net服务器传递给javascript,但遇到了一个异常。
名称"serializer"在当前上下文中不存在在我的Admin.aspx。cs 中
protected static string urlEdit;
protected void Page_Load(object sender, EventArgs e)
{
// blah blah...
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
}
然后在标记代码中:
<script type="text/javascript">
function Edit_Click() {
var options = SP.UI.$create_DialogOptions();
options.url = <%= serializer.Serialize(urlEdit) %>;
};
serializer
仅存在于Page_Load
中。与其从标记访问序列化程序,为什么不创建返回序列化值的公共方法或属性呢?
protected static string urlEdit;
protected void Page_Load(object sender, EventArgs e)
{
// blah blah...
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
}
public string GetSerializedUrl()
{
return serializer.Serialize(urlEdit);
}
然后在标记中调用此方法:
options.url = "<%= GetSerializedUrl() %>";
更新
事实上。。。您不需要序列化字符串就可以使用javascript。因此,您的代码可以简化为以下内容:
protected static string urlEdit = "www.example.com";
以及简化的标记:
options.url = "<%= urlEdit %>";
尝试用引号将其包装,以便javascript将其视为字符串。。。
options.url = '<%= serializer.Serialize(urlEdit) %>';
你的代码会呈现。。。
options.url = site.com/url;//invalid javascript
就像我的一样。。。
options.url = 'site.com/url';//valid javascript
serializer
仅存在于Page_Load函数中。为了让内联代码识别它,需要在类命名空间中声明它。
protected static string urlEdit;
protected var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
protected void Page_Load(object sender, EventArgs e)
{
}
musefan也认为options.url需要用引号括起来。
通常情况下,为了序列化变量,将值注入到javaScript中,并使用以下值
ClientScript.RegisterClientScriptBlock(this.GetType(), "variable", "<script language=javascript> var variableUrl='" + urlEdit+"' </script>");
注意,这段代码应该在页面的加载方法中
然后在你的脚本中,你可以使用像这样的变量
<script type="text/javascript">
function Edit_Click() {
var options = SP.UI.$create_DialogOptions();
options.url = variableUrl;
};
就我个人而言,我发现使用隐藏字段来完成这项工作很容易。
即
标记(.aspx)
<asp:HiddenField ID="hiddenRequest" runat="server" ClientIDMode="Static" />
代码隐藏(.aspx.cs)
hiddenRequest.value = "Test!";
string test = (string)hiddenRequest.value;
带有jQuery的Javascript(便于选择)(.js)
$('#hiddenRequest').val('Test!');
var test = $('#hiddenRequest').val();