2

我想更好地理解将对象转换为名称与值集合的问题

说……如果我能那样做

1) java脚本是否需要一些微调?打包数据..

2)对我来说最重要的是:从该键值转换Js为 a的正确方法是Dictionary<T,T> C#什么?

Aspx / Html部分_

<input type="text" id="tbx_Name" value="Avi" />
<input type="text" id="tbx_City" value="TelAviv" />
<input type="text" id="tbx_Country" value="Israel" />

<select id="ChosenRandomClass" style="display:none">
<option selected="selected" value="0">(choose a random)</option>
<option value="1">random Top Beach</option>
<option value="2">random Top Center</option>
<option value="3">random Local Pub</option>
</select>

JavaScript / jQuery部分_

  function AddNew() {

        if (!confirm("would you like to add this contact ?")) return;

        var Name = $('#tbx_Name').val();
        var City = $('#tbx_City').val();
        var Country = $('#tbx_Country').val();

        var selectedRC = $('#ChosenRandomClass option:selected').val();

        var hDate = []

        var param1 = { key: "Name", value: Name };
        var param2 = { key: "City", value: City };
        var param3 = { key: "Country", value: Country };
        var param4 = { key: "SelctedClass", value: selectedRC };

        hDate.push(param1);
        hDate.push(param2);
        hDate.push(param3);
        hDate.push(param4);
                                         // is this part necessary the data will not get to
                                         // code behind properly without the serializing ?
        var startPrt = Sys.Serialization.JavaScriptSerializer.serialize(hDate);
              ajaxUpdate("addNew", startPrt);

    }

Code behind C#部分_

public void AddNewRecord(object startPrt)
{
    Dictionary<string, string> SenthDate = new Dictionary<string, string>();
   //        .....etc

}

我会很感激正确的答案

感谢您的帮助和时间。

4

2 回答 2

2

我试了一下您的示例,发现startPrt参数实际上是作为Dictionary(string, object)数组接收的。因此,如果您像这样进行 AJAX 调用:

var hDate = [];
hDate.push({ key: "Name", value: Name });
hDate.push({ key: "City", value: City });
hDate.push({ key: "Country", value: Country });
hDate.push({ key: "SelctedClass", value: selectedRC });

$.ajax({
    contentType: 'application/json; charset=utf-8',
    url: 'MyPage.aspx/AddNewRecord',
    type: 'POST',
    data: JSON.stringify({ startPrt: hDate }),
    success: success, // success callback
    error: error // error callback
});

您可以定义您的WebMethod,如下所示,将startPrt参数转换为字典:

[WebMethod]
public static void AddNewRecord(object startPrt)
{
    var dict = new Dictionary<string, object>();
    foreach (Dictionary<string, object> pair in (Array)startPrt)
        dict.Add((string)pair["key"], pair["value"]);
}
于 2012-12-27T00:57:31.803 回答
0

传统的方法是构造一个纯 javascript 对象,jQuery.ajax(...)无需任何预处理即可使用。

var hDate = {
    "Name": $('#tbx_Name').val(),
    "City": $('#tbx_City').val(),
    "Country": $('#tbx_Country').val(),
    "SelctedClass": $('#ChosenRandomClass').val()
};
ajaxUpdate("addNew", hDate);

ajaxUpdate()中,ajax 表达式将是这样的:

function ajaxUpdate(action, data) {
    ...
    $.ajax({
        url: '...',
        data: data,
        ...
        success: function(){
            ...
        }
    });
}

因此,序列化的数据将提供给任何风格的服务器端脚本。

于 2012-12-26T23:54:31.973 回答