有没有办法替换Response.Write?

时间:2012-09-03 01:55:51

标签: response.write

每个人都过得愉快,

我的问题是,我有以下功能:

function change_tarif(param) {
    var arrTarif = <% Response.Write(Session["Tarif"]); %>
    .....
}

Session [“Tarif”] - 包含多维数组List,当我加载我的页面时,它给出了这个错误

无法修改Controls集合,因为该控件包含代码块(即&lt;%...%&gt;)。

当我删除<% Response.Write(Session["Tarif"]); %>时,它不会出现此错误。 所以我想知道如何在不使用代码块<% %>的情况下替换此代码以从Session [“Tarif”]获取数组List?

提前致谢。

这是我在C#中的数组列表代码:

    public void getTarifList()
{
    int intRows = 0;
    string strTarif = "null";
    Session["Tarif"] = "null";

    SqlCommand cmdTarif = new SqlCommand("sp_SIMPay_GetTarifList");
    cmdTarif.CommandType = CommandType.StoredProcedure;

    DataTable dtTarif = SQL.GetData(cmdTarif);

    if (dtTarif.Rows.Count > 0)
    {
        intRows = dtTarif.Rows.Count;

        strTarif = "new Array(" + intRows + ");";
        int intIndex = 0;

        foreach (DataRow dRows in dtTarif.Rows)
        {
            strTarif += "arrTarif[" + intIndex + "] = new Array('" + dRows["TarifName"] + "', '" + dRows["ProviderID"] + "', '" + dRows["CodeID"] + "');";
            intIndex++;
        }
    }
    else
    {
        strTarif = "null";
    }
    Session["Tarif"] = strTarif;
}

我的完整剧本:

function change_tarif(param) {
var  arrTarif = <% Response.Write(Session["Tarif"]); %>
var select = document.getElementById('TarifList');


var i = 0;

if (arrTarif != null) {
    for (i = 0; i < arrTarif.length; i++) {
        if (arrTarif[i][1] == '98' && param == '98') {
            clear_tarif();
            select.options[select.options.length] = new Option('' + arrTarif[i][0] + '', '' + arrTarif[i][2] + '');
            break;
        }
        else {
            clear_tarif();
            select.options[select.options.length] = new Option('Default Tarif', '');
        }
    }
}

}

2 个答案:

答案 0 :(得分:0)

您可以使用Expression(相当于Response.Write())。

function change_tarif(param) {
 var arrTarif = <%= Session["Tarif"] %>;
}

编辑:我已经自定义了您的代码,

代码背后:

protected void Page_Load(object sender, EventArgs e)
{
    getTarifList();
}
public void getTarifList()
{
    Session["Tarif"] = "null";
    StringBuilder sb = new StringBuilder();
    sb.AppendLine("new Array(" + 3 + ");");
    for(int i=0;i<3;i++)
    {
        sb.AppendLine("arrTarif[" + i + "] = new Array('A" + i + "', 'B" + i + "', 'C" + i + "');");
    }
    Session["Tarif"] = sb.ToString();
}

和标记,

 <script type="text/javascript">
    function change_tarif(param){
       var  arrTarif = <% Response.Write(Session["Tarif"]); %>
       return arrTarif;
      }
     console.log(change_tarif('test'));
 </script>

答案 1 :(得分:0)

这是因为你的页面代码中某处你做了类似的事情(只是一个例子 - 这里的Label并不重要,任何动态添加/删除的控件都会触发错误):

Label lbl = new Label ();
lbl.Xxxx = ...;

Controls.Add ( lbl ); // this is what triggers your issue

当您在同一容器中有<%= ... %>时,您还尝试通过使用该容器的Controls集合(PagePanel来动态添加控件,等等,你会得到你看到的那个错误。

如果可以,请尝试删除动态添加/删除控件的代码到容器(具有<%= ... %>的同一容器,然后<%= ... %>块将开始工作。

要删除添加/删除控件的动态逻辑,只需将这些控件放入容器中,就像任何其他控件一样,如

<asp:Label runat="server" id="lbl" ... />

然后只需在需要时显示/隐藏控件。这样控件始终存在于页面中,您不必在运行时添加/删除它,然后您可以在同一个容器中放置代码块。

以下是一个会产生此错误的简单示例:

...
<div runat="server" id="div1">
    <asp:Label runat="server" id="lbl1" /><br />
    <span>Name:&nbsp;<%= Session["name"] %></span>
</div>
...

// in code-behind
protected override void OnLoad ( EventArgs e )
{
    Label lbl2 = new Label ();
    lbl2.Text = "Time: " + DateTime.Now.ToString ();

    // Error: you cannot modify the Controls collection if
    // the same control contains code blocks
    div1.Controls.Add ( lbl2 );
}