最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

How to pass Dictionary from c#(server) to javascript(client) - Stack Overflow

programmeradmin2浏览0评论

I have a function in c# that builds dictionary ,I need to pass this dictionary to my java-script function.

This is what I have tried

My server function

  public partial class login : System.Web.UI.Page
    {
        protected Dictionary<string, string> GetTradingTypeToSelect()
            {
                Dictionary<string, string> dict = new Dictionary<string, string>();
                try {  
               string Types =GetString("some text);
               var items = Types.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(s => s.Split(new[] { '=' }));

                foreach (var item in items)
                {
                    dict.Add(item[1], item[0]);

                }
    //this working 100%
                }
                catch (Exception ex)
                {

                }
                return dict;
            }
}

My client:

$(document).ready(function () {

    $("#Account").keyup(function () {

        var TradingTypeToSelect = '<%=GetTradingTypeToSelect();%>';
//TradingTypeToSelect  is equals to string '<%=GetTradingTypeToSelect();%>' 
        var test = TradingTypeToSelect[0].key;
        var test2 = TradingTypeToSelect[0].value;



    });

 });

What am I missing here?

I have a function in c# that builds dictionary ,I need to pass this dictionary to my java-script function.

This is what I have tried

My server function

  public partial class login : System.Web.UI.Page
    {
        protected Dictionary<string, string> GetTradingTypeToSelect()
            {
                Dictionary<string, string> dict = new Dictionary<string, string>();
                try {  
               string Types =GetString("some text);
               var items = Types.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(s => s.Split(new[] { '=' }));

                foreach (var item in items)
                {
                    dict.Add(item[1], item[0]);

                }
    //this working 100%
                }
                catch (Exception ex)
                {

                }
                return dict;
            }
}

My client:

$(document).ready(function () {

    $("#Account").keyup(function () {

        var TradingTypeToSelect = '<%=GetTradingTypeToSelect();%>';
//TradingTypeToSelect  is equals to string '<%=GetTradingTypeToSelect();%>' 
        var test = TradingTypeToSelect[0].key;
        var test2 = TradingTypeToSelect[0].value;



    });

 });

What am I missing here?

Share Improve this question edited Aug 25, 2016 at 12:44 Neil 6661 gold badge7 silver badges22 bronze badges asked Aug 25, 2016 at 12:23 Vladimir PotapovVladimir Potapov 2,43710 gold badges49 silver badges72 bronze badges 2
  • You can use ajax post method.. check this link. stackoverflow./questions/7776337/… – Ponmani Chinnaswamy Commented Aug 25, 2016 at 12:30
  • @PonmaniChinnaswamy why post? If OP needs to get data and he is not sending any parameters? – Mateusz Commented Aug 25, 2016 at 12:33
Add a ment  | 

3 Answers 3

Reset to default 2

You can create a [WebMethod] in the code behind and call it from javascript using $.ajax.Below is a plete example:

Code behind:

[System.Web.Services.WebMethod]
public static Dictionary<string, string> GetTradingTypeToSelect()
{
    var dict = new Dictionary<string, string>();
    dict.Add("1", "Item 1");
    dict.Add("2", "Item 2");
    return dict;
}

.ASPX:

<head runat="server">
    <title></title>
    <script src="//code.jquery./jquery-1.12.3.min.js"></script>
    <script type="text/javascript">
        $(function () {

            $("#Account").keyup(function () {
                $.ajax({
                    type: "POST",
                    url: "AjaxCallExample.aspx/GetTradingTypeToSelect",
                    contentType: "application/json;charset=utf-8",
                    success: function (data) {
                        alert(data.d["1"]);
                        alert(data.d["2"]);
                    },
                    error: function (errordata) {
                        console.log(errordata);
                    }
                });
            });
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <input id="Account" type="text" />
    </form>
</body>

How about exposing the dictionary in the view model:

public Dictionary<string, string> TradingTypesToSelect { get; set; }

And iterate over the dictionary inside the <script> block, creating a JavaScript associative array, like so:

<script>
    var tradingTypesToSelect = {};
    <% foreach (var tradingType in Model.TradingTypesToSelect) { %>
        tradingTypesToSelect["<%= tradingType.Key %>"] = "<%= tradingType.Value %>";
    <% } %>
</script>

At least this way you don't have to make another call (via AJAX) to retrieve additional data.

I believe you need to make a WebMethod to enable the server function to be called from the client side. Here is an example: Calling ASP.Net WebMethod using jQuery AJAX

发布评论

评论列表(0)

  1. 暂无评论