Я пытаюсь получить данные на контроллер из клиентского скрипта, я строковые данные, поэтому я получаю что-то вроде:
{"Name":"","Description":"","FieldType":"radio","Fields":[{"Field":{"Name":"something","Value":"nameit"}},{"Field":{"Name":"something else","Value":"dontnameit"}}]}
Мне нужно будет проверить мои данные на контроллере, однако, в своем действии я получаю нулевое значение по какой-то причине, если я использую объект или строку? Почему это так?
Я просмотрел множество других постов, но неясно, нужно ли создавать собственную реализацию IValueProvider? Я думаю, что есть один доступный в сборке MS Futures, я пытался найти файл, так как я не хочу, чтобы весь код внутри DLL, но я не мог его найти ...
Любые указатели будут оценены ...
Контроллер:
[HttpPost]
public JsonResult AddField(string field) //or object
{
//code here
}
Редактировать: Я проследил за сообщением Филлом Хаком, но имел некоторые ошибки, фактически возвращая строго типизированный объект на мой взгляд ...
мой вызов ajax ..
{
url: url,
type: "post",
dataType: 'json',
traditional: true,
data: jsondata, // { "field" : jsondata},
contentType: 'application/json; charset=utf-8',
...
}
Я создал пользовательский поставщик значений ...
открытый класс Jsonify: ValueProviderFactory
{
public Jsonify () {}
public override IValueProvider GetValueProvider(ControllerContext controllerContext)
{
var jsonData = GetDeserializedJson(controllerContext);
if (jsonData == null)
{
return null;
}
//currently used by mvc2 futures
//return new DictionaryValueProvider<object>(backingStore,
//CultureInfo.CurrentCulture);
// what do I return?
}
private static object GetDeserializedJson(ControllerContext controllerContext)
{
if (!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase))
{
// not JSON request
return null;
}
StreamReader reader = new StreamReader(controllerContext.HttpContext.Request.InputStream);
string bodyText = reader.ReadToEnd();
if (String.IsNullOrEmpty(bodyText))
{
// no JSON data
return null;
}
//json.net
var jsonData = JsonConvert.DeserializeObject<SurveyField>(bodyText);
return jsonData;
}
}
Контроллер:
public JsonResult AddSimpleField(SurveyField field) { ... }