Я работал с JsonDotNetValueProviderFactory и у меня проблема с привязкой данных к аргументу контроллера - я не получал данных в объектах List, не могли бы вы предоставить ваши ценные входные данные.
В основном я работаю с угловым jsи это загрузка в файл Excel, так как я не смог загрузить большие данные Excel, я использовал этот подход
Я попытался перейти по этой ссылке ниже https://www.dalsoft.co.uk/blog/index.php/2012/01/10/asp-net-mvc-3-improved-jsonvalueproviderfactory-using-json-net/
Код JavaScript
$scope.SaveData = function (excelData) {
var person = getPerson();
//var json = JSON.stringify(person);
var data = $.toJSON(excelData);
$http({
method: "POST",
url: "/Home/ImportData",
dataType: 'json',
//data: JSON.stringify(excelData),
data: { objects: data },
//data: json
headers: {
'Content-Type': 'application/json'
}
}).then(function (data) {
if (data.status) {
$scope.Message = excelData.length + " record inserted";
}
else {
$scope.Message = "Failed";
}
}, function (error) {
$scope.Message = "Error";
})
}
в global.asax
ValueProviderFactories.Factories.Add(new JsonDotNetValueProviderFactory());
JsonDotNetValueProviderFactory class
public sealed class JsonDotNetValueProviderFactory : ValueProviderFactory
{
public override IValueProvider GetValueProvider(ControllerContext controllerContext)
{
IValueProvider vProvider = null;
if (controllerContext == null)
throw new ArgumentNullException("controllerContext");
if (!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase))
return null;
var reader = new StreamReader(controllerContext.HttpContext.Request.InputStream);
var bodyText = reader.ReadToEnd();
//dynamic objects = JsonConvert.DeserializeObject<ExpandoObject>(bodyText, new ExpandoObjectConverter());
//foreach (var obj in objects)
//{
//vProvider = String.IsNullOrEmpty(bodyText) ? null : new DictionaryValueProvider<object>(objects, CultureInfo.CurrentCulture);
//}
return String.IsNullOrEmpty(bodyText) ? null : new DictionaryValueProvider<object>(JsonConvert.DeserializeObject<ExpandoObject>(bodyText, new ExpandoObjectConverter()), CultureInfo.CurrentCulture);
//return vProvider;
}
}
и вот мой метод действия
я не получал никаких данных для объектов здесь
[HttpPost]
public ActionResult ImportData(List<StudentsList> objects)
{
bool status = false;
if (ModelState.IsValid)
{
using (ExcelUploadEntities db = new ExcelUploadEntities())
{
foreach (var i in objects)
{
db.StudentsLists.Add(i);
}
db.SaveChanges();
status = true;
}
}
return new JsonResult { Data = new { status = status } };
}