简体   繁体   中英

Calling a javascript method with arguments / values from code-behind

Is there a way for me to call a javascript method from code-behind that takes two arguments/values? Please check the following code:

private void ddl_Eval_SelectedIndexChanged (Object sender, System.EventArgs e)
{

    dtEval = new DataTable();
    dtEval = data.GetEvaluation2();
    DataView dvEval = dtEval.DefaultView;

    string xmlDoc = String.Empty;

    foreach (DataRowView drvEval in dvEval)
    {
        if (drvEval.Row["EvaluationID"].ToString() == ddl_Eval.SelectedValue.ToString())
        {
            xmlDoc = drvEval.Row["EvalAnswers"].ToString();
        }
    }

    XDocument xdoc = new XDocument();
    xdoc = XDocument.Parse(xmlDoc);

    foreach (XElement child in xdoc.Root.Elements("Answer"))
    {
        //Response.Write(child.Attribute("item").Value + " " + child.Value + "<br />");

        //THIS IS WHERE I NEED TO PUT THE CODE SO I CAN SEND THE VALUE
        //OF THE ATTRIBUTE "item" AND THE VALUE OF THE child node itself.

    }

}

And here's the XML string:

<ANSWERS>
  <Answer item="ddl_3">A</Answer>
  <Answer item="ddl_8">A</Answer>
  <Answer item="ddl_13">Y</Answer>
  <Answer item="ddl_16">Y</Answer>
  <Answer item="ddl_19">Y</Answer>
  <Answer item="ddl_22">N</Answer>
  <Answer item="ddl_26">Y</Answer>
  <Answer item="ddl_30">N</Answer>
  <Answer item="ddl_34">Y</Answer>
  <Answer item="ddl_38">N</Answer>
  <Answer item="ddl_42">StarLight</Answer>
</ANSWERS>

And this is the page wherein I want javascript to change the selected values of the select controls. Screenshot

Is it possible? I want to send those two arguments/values so that javascript can change the selected values of the <select> controls I have on the page.

changing a data list

ddl_eval.items.clear()

foreach (XElement child in xdoc.Root.Elements("Answer"))
    {
       ddl_eval.items.add(child.Value,child.Attribute("item").Value);
    }

You don't need JavaScript -- I would code it like this:

Response.write("<answers>")

foreach (XElement child in xdoc.Root.Elements("Answer"))
    {
       Response.Write(@"<answer item="""+child.Value+@""">"+child.Attribute("item").Value+"</answer>");
    }

Response.Write("</answers>");

Also, modern html style is to have all tags lower case (xml requires it.)


You should use this.Page.RegisterClientScriptBlock(key, script);

It might look something like this:

 this.Page.RegisterClientScriptBlock("some unique name",@"
<script language=""JavaScript"">
   alert(""Hi, I'm some client script!"");
</script>");

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM