我已从我的网络表单中检索数据,并使用button_click
上的Javascript将其放入对象中。然后我尝试使用Ajax
和JSON
将对象传递给我的C#代码中的方法。
使用Javascript:
$(document).ready(function () {
$("#go").click(function () {
$('#<%=gv_Rota.ClientID%>')
.find('tr')
.each(function (row) {
$(this).find('select')
.each(function (col) {
$ctl = $(this)
if ($ctl.is('select')) {
var shift = $ctl.val();
var day = row;
var wk = col + 1;
var objectitem = { ShiftId: shift, Day: day, Week: wk };
$.ajax({
url: '/Administration.aspx/StoreObject',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({ myObject: objectitem })
});
}
});
});
});
});
C#背后:
[WebMethod]
public static void StoreObject(string[] myObject)
{
}
在Javascript中,您可以看到它在GridView周围循环并从GridView中的DropDownLists中找到selectedvalues
。因此,Javascript将多次运行,这意味着将传递多个对象。
如何在DataTable的行中保存传递给C#的所有这些对象,例如,当我按下&#39; Save&#39;按钮。首先,我不太清楚StoreArray
方法中的内容,其次,我不确定保留DataTable的最佳方法是什么(如果这是我存储我的对象的方法) ),按下&#39; Save&#39;按钮和PostBack
,因为我确定它会因此重置?
答案 0 :(得分:4)
在C#中创建一个反映JavaScript中对象的类
这样的事情:
public class Item
{
public string Id { get; set; }
public string Day { get; set; }
public string Week { get; set; }
}
然后在您输入时预期
[WebMethod]
public static void StoreObject(Item myObject)
{
}
编辑:
如果要将项目保存到集合中,可以创建如下项目列表:
private List<Item> myList = new List<Item>();
[WebMethod]
public void StoreObject(Item myObject)
{
myList.Add(myObject);
}
注意:这不能是静态的。我不确定WebMethods是否支持静态方法。如果不是,您需要创建一个asmx页面来托管方法See here