У меня есть пользовательский интерфейс, который выглядит следующим образом:Json и ASP.NET MVC модель привязки
Я пытаюсь данным недавно созданной строки на сервере, так что сервер может сохранить его.
Я отправляю данные в формате JSON от клиента к моему приложению MVC. Вот мой Ajax запрос:
var values = []; // an array with each item being an object/associative array
// more code to get values into variables
for (var i = 0; i < cultures.length; i++) {
var cultureName = cultures[i];
var valueTextBox = $(row).find(...);
var value = $(valueTextBox).val();
var cultureNameAndValue = { 'CultureShortName' : cultureName, 'StringValue' : value };
values.push(cultureNameAndValue);
}
var stringTableRow =
{
'ResourceKeyId': resourceKeyId,
'Key': resourceKeyName,
'CategoryId': categoryId,
'CategoryName': categoryName,
'StringValues': values
};
var stringified = JSON.stringify({ StringTableRow: stringTableRow });
$.ajax('/Strings/JsonCreateNew',
{
cache: false,
async: false,
type: 'POST',
contentType: 'application/json; charset=UTF-8',
data: stringified,
dataType: 'json',
error: SaveNewResourceClientSideHandler.OnError,
success: SaveNewResourceClientSideHandler.OnSuccess
});
Вот данные, которые он посылает (как показано в Firebug):
{"StringTableRow":{"ResourceKeyId":"","Key":"Foo",
"CategoryId":"1","CategoryName":"JavaScript",
"StringValues":[
{"CultureShortName":"en-US","StringValue":"Something"},
{"CultureShortName":"fr-FR","StringValue":""}]
}}
Вот мой сервер код сторона:
public ActionResult JsonCreateNew(StringTableRow row)
{
// CreateNewStringTableRow(row);
// return a success code, new resource key id, new category id
// return Json(
new { Success = true, ResourceKeyId = row.ResourceKeyId,
CategoryId = row.CategoryId },
JsonRequestBehavior.AllowGet);
return new EmptyResult();
}
А вот бизнес-объект, Я хочу, чтобы мои входящие данные POST были связаны с:
public class StringTableRow
{
public StringTableRow()
{
StringValues = new List<CultureNameAndStringValue>();
}
public long ResourceKeyId { get; set; }
public string Key { get; set; }
public long CategoryId { get; set; }
public string CategoryName { get; set; }
public IList<CultureNameAndStringValue> StringValues { get; set; }
}
public class CultureNameAndStringValue
{
public string CultureShortName { get; set; }
public string StringValue { get; set; }
}
Global.asax
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
}
}
Проблема:
Действие JsonCreateNew
получает объект, который не является нулевым, но имеет все свойства неинициализированным, то есть все обнуляемых свойства равны нулю и значение свойства в их значения по умолчанию. Поэтому, фактически, я не получаю никаких данных вообще, даже когда клиент отправляет совершенно правильную строку Json.
Нужно ли выполнять индивидуальную привязку модели?
Я тоже в аналогичном сценарии, когда я отправляю данные на сервер с помощью ajax-запроса, тогда мне нужно привязать все значения формы к json-формату, например var name = $ («Name»). Val(); var age = $ ("Age"). Val(); // build json object var squirrel = { Имя: фамилия, имя: Возраст: возраст, }; Есть ли какой-либо другой способ, с помощью которого мне не нужно вручную привязывать значения к json.Means, есть ли что-нибудь, что может напрямую преобразовать мою модель просмотра в json, а затем я могу получить ее в контроллере как объект? – Dragon