未被asp.net MVC动作方法接收的Json数据
本文关键字:Json 数据 方法 asp net MVC 未被 | 更新日期: 2023-09-27 17:50:07
我试图从客户端脚本获得一些数据到控制器,我正在对我的数据进行字符串化,因此我收到如下内容:
{"Name":"","Description":"","FieldType":"radio","Fields":[{"Field":{"Name":"something","Value":"nameit"}},{"Field":{"Name":"something else","Value":"dontnameit"}}]}
我需要在控制器上验证我的数据,然而,在我的行动中,我收到一个null出于某种原因,如果我使用对象或字符串?为什么呢?
我已经看了很多其他的帖子,但不清楚,我需要创建自己的自定义IValueProvider实现吗?我认为在ms futures assembly中有一个可用,我试图找到该文件,因为我不想要dll中的所有代码,但我找不到它…
请指教……
控制器:
[HttpPost]
public JsonResult AddField(string field) //or object
{
//code here
}
编辑:我已经遵循了phill hack的帖子,但实际上有一些错误返回强类型对象到我的视图…
my ajax call.
{
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) { ... }
你可以看看下面的博客文章,它说明了如何使用自定义JsonValueProviderFactory
从客户端脚本发送JSON编码字符串到控制器动作,并让该动作接收它作为强类型模型,并从默认模型绑定器的验证中受益:
[HttpPost]
public ActionResult AddField(SomeViewModel model)
{
if (!ModelState.IsValid)
{
// the client sent an invalid data
return Json(new { IsSuccess = false });
}
// the model passed validation => do some processing with this model
return Json(new { IsSuccess = true });
}
正如Phil Haack解释的那样,这个自定义JsonValueProviderFactory
只有在使用ASP时才有必要。. NET MVC 2和内置的ASP。. NET MVC 3,所以它应该开箱即用