невозможно привязать свойство к моему контроллеру из JsonDotNetValueProviderFactory - PullRequest
0 голосов
/ 05 декабря 2018

Я работал с 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 } };
    }
...