0

我打算将一个变量从 asp.net 服务器传递给 javascript,但我遇到了一个异常。

当前上下文中不存在名称“序列化程序”在我的 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) %>;

                              };
4

5 回答 5

1

尝试将其用引号括起来,以便 javascript 将其视为字符串...

options.url = '<%= serializer.Serialize(urlEdit) %>';

您的代码将呈现...

options.url = site.com/url;//invalid javascript

我的会在哪里渲染...

options.url = 'site.com/url';//valid javascript
于 2012-04-04T16:08:41.283 回答
1

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  %>";
于 2012-04-04T16:29:46.520 回答
0

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 需要用引号括起来。

于 2012-04-04T16:23:30.763 回答
0

通常,使用此值将变量序列化到 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;

                          };
于 2012-04-04T16:27:43.893 回答
-2

就个人而言,我发现使用隐藏字段来完成这项工作很容易。

IE

标记 (.aspx)

<asp:HiddenField ID="hiddenRequest" runat="server" ClientIDMode="Static" />

背后的代码 (.aspx.cs)

hiddenRequest.value = "Test!";
string test = (string)hiddenRequest.value;

带有 jQ​​uery 的 Javascript(便于选择) (.js)

$('#hiddenRequest').val('Test!');
var test = $('#hiddenRequest').val();
于 2012-04-04T16:14:26.523 回答