Bonjour,
J'ai le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
Mon index.cshtml :
@using MasterManyGridViewMultipleFieldsKeyRazorMvc4.Models
@model List<Master>
<script type="text/javascript">
    $(function () {
    debugger;
        LoadingPanel.Show();
        $.ajax({
            type: "POST",
            url: '@Url.Action("IndexPartial")',
            data: @(Html.Raw(Json.Encode(Model))),
//data: @(Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Json.Encode(Model)))),
            datatype: 'json',
            contentType:"application/json; charset=utf-8",
            success: function (response) {
                $("#Container").html(response);
                LoadingPanel.Hide();
            }
        });
    });
</script>
 
 
My IndexPartialView.cshtml :
@model System.Collections.IEnumerable
<br />
use of "Model"
 
 
My HomeController.cs :
public class HomeController : Controller
    {
        public ActionResult Index()
        {
            //In my real project, I do some checks to allow the connection or not
            if (true)
                Session["Rights"] = "OK";
            else
                return new EmptyResult();
 
            return View("Index", DataProvider.GetMasters());
        }
 
        //public ActionResult IndexPartial(List<Master> m)
        [HttpPost]//[HttpGet]
        public ActionResult IndexPartial(string m)
        //public ActionResult IndexPartial()
        {
            var viewModel = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<List<Master>>(m);
            //var viewModel = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<List<Master>>(Request.QueryString[0]);
 
            return PartialView("IndexPartialView", /*m*/viewModel);
        }
}
 
My DataProvider.cs :
public static IEnumerable GetMasters()
        {
            List<Master> list = new List<Master>();
            list.Add(new Master("Nancy", "Davolio", 20, "Felipe"));
            list.Add(new Master("Andrew", "Fuller", 30, "Don"));
            return list;
        }
 
[Serializable]
public class Master
    {
        string _firstName, _secondName, _fourthName;
        int _age;
 
        public Master()
        {
        }
        public Master(string first, string second, int age, string fourth)
        {
            this._firstName = first;
            this._secondName = second;
            this._age = age;
            this._fourthName = fourth;
        }
 
        public string FirstName
        {
            get { return _firstName; }
            set { _firstName = value; }
        }
 
        public string SecondName
        {
            get { return _secondName; }
            set { _secondName = value; }
        }
 
        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }
 
        public string FourthName
        {
            get { return _fourthName; }
            set { _fourthName = value; }
        }
    }
Quand je regarde dans firebug au niveau de mon script, j'ai le contenu de data qui est :
[{"FirstName":"Nancy","SecondName":"Davolio","Age":20,"FourthName":"Felipe"},{"FirstName":"Andrew","SecondName":"Fuller","Age":30,"FourthName":"Don"}
Mais quand j'arrive dans mon action j'ai une exception qui est levée:
at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()
at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
at System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String input)
at System.Web.Mvc.JsonValueProviderFactory.GetDeserializedObject(ControllerContext controllerContext)
at System.Web.Mvc.JsonValueProviderFactory.GetValueProvider(ControllerContext controllerContext)
at System.Web.Mvc.ValueProviderFactoryCollection.<>c__DisplayClassc.<GetValueProvider>b__7(ValueProviderFactory factory)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at System.Web.Mvc.ValueProviderFactoryCollection.GetValueProvider(ControllerContext controllerContext)
at System.Web.Mvc.ControllerBase.get_ValueProvider()
at System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor)
at System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__1e(AsyncCallback asyncCallback, Object asyncState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state)
at System.Web.Mvc.Controller.<>c__DisplayClass1d.<BeginExecuteCore>b__17(AsyncCallback asyncCallback, Object asyncState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout)
at System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout)
at System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state)
at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__2(AsyncCallback asyncCallback, Object asyncState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Quand j'essaye de mettre GET au lieu de POST dans le type de l'appel ajax, que je change [HttpPost] en [HttpGet], que je change la définition de la method de l'action en "public ActionResult IndexPartial()", alors j'ai Request.QueryString[0] qui vaut {undefined=undefined&undefined=undefined}... Si je continue l'execution de "var viewModel = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<List<Master>>(Request.QueryString[0]);", j'obtiens quasiement la même stacktrace, sauf que ça m'indique que l'erreur se situe au niveau de l'appel à à la méthode Derialize.
Est-ce qeu vous pouvez me dire quel doit être la bonne syntaxe de mon appel ajax et de mon action mvc s'il vous plaît ?