Для этого вопроса я использую веб-формы ASP.NET на C #, веб-службу и jQuery. Я прочитал этот пост об использовании массива для передачи набора параметров в веб-метод с использованием jQuery AJAX. Мне интересно, можно ли сделать то же самое без использования индексов. Проблема с индексами заключается в том, что порядок имеет значение, а выполнение обновления вызывает затруднения, поскольку оно включает обновление клиентского скрипта и аргументов веб-метода. В настоящее время я использую именованные аргументы, но это очень утомительно. У моего самого большого веб-метода 20 аргументов! Фу! Я ищу здесь ярлык, не заботясь о порядке. Возможно ли это?
var obj = {};
// Iterate through each table row and add the editor field data to an object.
$('.addressRow').each(function ()
{
var row = $(this);
var addressField = row.find('.addressField');
var attr = addressField.attr('addressFieldName');
var val = addressField.val()
obj[attr] = val;
});
$.ajax(
{
type: 'POST',
url: '/WebServices/AddressService.asmx/SaveAddress',
data: JSON.stringify(obj),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (response)
{
alert('address saved');
},
error: function (response)
{
alert('error');
}
});
[WebMethod]
public void SaveAddress(string streetAddress1, string streetAddress2, string apartmentNumber, string city, strng state, string zipCode, string country)
{
// save address...
}
ОБНОВЛЕНИЕ:
Спасибо всем, кто ответил. Используя ваши ответы и некоторые другие вопросы по стеку, я наконец смог собрать воедино рабочую демонстрацию. Я вставляю сюда свой доказательный код концепции, так что любой, кто столкнулся с той же проблемой, может увидеть, как это делается.
Web Service Demo
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
[ScriptService]
public class WebService1 : WebService
{
[WebMethod]
public string GetEmployeeData(Employee employee)
{
var output = string.Format("Employee #{0}: {1} {2} lives at {3} in {4}, {5} with a zip code of {6} and was born on {7}.", employee.ID, employee.FirstName, employee.LastName, employee.StreetAddress, employee.City, employee.State, employee.ZipCode, employee.BirthDate.ToShortDateString());
if (employee.AccessCodes != null)
{
output += string.Format(" Employee #{0} has access codes: ", employee.ID);
foreach (var accessCode in employee.AccessCodes)
{
output += accessCode + " , ";
}
output = output.Substring(0, output.Length - 2);
}
else
{
output += string.Format(" Employee #{0} does not have any has access codes.", employee.ID);
}
return output;
}
}
public class Employee
{
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
public string StreetAddress { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
public List AccessCodes {get;set;}
}