将asp.net变量传递给javascript失败

时间:2012-04-04 16:06:51

标签: javascript asp.net

我要将一个变量从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) %>;

                              };

5 个答案:

答案 0 :(得分:1)

尝试将其包装在引号中,以便javascript将其视为字符串...

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

你的代码会呈现......

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

我的地方会...... ...

options.url = 'site.com/url';//valid javascript

答案 1 :(得分: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  %>";

答案 2 :(得分: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需要用引号括起来。

答案 3 :(得分: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;

                          };

答案 4 :(得分:-2)

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

即。

标记(.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();