jquery ajax/post/get 传参数给 mvc的action

jquery ajax/post/get 传参数给 mvc的action
1.ActionResult Test1   
2.View  Test1.aspx
3.ajax page
4.MetaObjectMigration.cs     string json convert to class
5.相关的代码下载(包含用的相关类, jquery.json.js等)

ActionResult Test1

public ActionResult Test1(string nameJS, UserInfoInputData model, string js)

        {

            UserInfoInputData userinfo = new UserInfoInputData();

            if (!string.IsNullOrEmpty(js))

            {

                userinfo = (UserInfoInputData)js.ToInputDataObject(typeof(UserInfoInputData));

            }

            

            ViewData["Time"] = model.Name + "  :" + userinfo.Name;

            ViewData["Time2"] = model.age;

            ViewData["Message"] = "Test1  :" + nameJS + "  :" + typeof(UserInfoInputData).ToString();



            ViewData["js"] = userinfo.ToJSON();



            return View();

        }

 

Test1.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>Test1</title>

</head>

<body>

    <div>

       The current time is: <%= DateTime.Now.ToString("T") %>

       <br/><br/>

        BO:<%=ViewData["Time"] %>

        <br/><br/>

        BO2:<%=ViewData["Time2"] %>

        <br/><br/>

        Message:<%=ViewData["Message"] %>

        <br/><br/>

        <%=ViewData["js"]%>

    </div>

</body>

</html>

 

ajax page   四种写法

function test(parameters) {

                var sjson = '{ "name~!@#$%^&*(){}|:\"<>?/.,\';\\[]v-name": "nvar", "desc": "des" } ';

                var sjs = '{"Name":"jsname", "age":3}';

                //get post 都可以

                $.post("Test1", "nameJS=" + encodeURIComponent(sjson) + "&model.name=modelName&model.age=3" + "&js=" + encodeURIComponent(sjs));



                //model.name model.Name 都可以

                var json = { "nameJS": "~!@#$%^&*(){}|:\"<>?/.,';\\[]v-name",

                    "model.name": "modelname", "model.age": 1,

                    "js":'{"Name":"jsname", "age":3}'

                };

                $.post("Test1", json);



                var param = {};

                param["nameJS"] = "paramjs";

                param["model.Name"] = "someone";

                param["model.age"] = 2;

                param["js"] = '{"Name":"jsname", "age":3, "Tags":"tag1"}';

                //或者param["js"] = JSON.stringify({"Name":"jsname", "age":3, "Tags":"tag1"});

                $.post("Test1", param);

                

                var metaformJsonItem = new Object();

                metaformJsonItem.nameJS = "~!@#$%^&*(){}|:\"<>?/.,';\\[]v-name";

                metaformJsonItem.js = JSON.stringify({

                    //key:value  key注意大小写

                    "Name": "~!@#$%^&*(){}|:\"<>?/.,';\\[]v-jsname",

                    "Tags": JSON.stringify(["tag1", "tag2"]),

                    "age": 3,

                    "Ids": JSON.stringify([1, 2, 3]), //或者'[1, 2, 3]'

                    "Country": 0,

                    "Countries": JSON.stringify([1, 2])

                });

                metaformJsonItem["model.Name"] = "modelname";

                metaformJsonItem["model.age"] = "11";

                

                $.post("Test1", metaformJsonItem);

            }

 

string json convert to object class

using System;

using System.Collections;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Reflection;

using System.Text;

using System.Web;

using Newtonsoft.Json;



namespace Demo.Common.Metaform.UI

{

    public static class MetaObjectMigration

    {

        private enum HandlingMethod

        {

            DoNothing,

            SimpleEnum,

            ArrayOfEnum,

            ArrayOfString,

            ListOfEnum,

            ListOfSerializable

        }



        public static InputDataObject ToInputDataObject(this string jsonXml, Type objectType)

        {

            return jsonXml.FromMetaJson(objectType); ;

        }

               

        

        public static InputDataObject FromMetaJson(this string json, Type objectType)

        {

            string jsonString = GetJsonFromMetaJson(json, objectType);



            JsonSerializer serializer = new JsonSerializer();

            serializer.NullValueHandling = NullValueHandling.Ignore;

            serializer.MissingMemberHandling = MissingMemberHandling.Ignore;



            InputDataObject deserialedObject =

                (InputDataObject) serializer.Deserialize(new StringReader(jsonString), objectType);



            return deserialedObject;



        }



        private static string GetJsonFromMetaJson(string json, Type displayObjectType)

        {

            PropertyInfo[] properties = displayObjectType.GetProperties();



            using (JsonTextReader reader = new JsonTextReader(new StringReader(json)))

            {

                using (StringWriter sw = new StringWriter())

                {

                    using (JsonTextWriter writer = new JsonTextWriter(sw))

                    {

                        HandlingMethod handlingMethod = HandlingMethod.DoNothing;

                        bool ignoreThisProperty = false;

                        string newKey = string.Empty;

                        int arrayLevel = 0;

                        Type elementType;



                        while (reader.Read())

                        {

                            if (reader.TokenType == JsonToken.PropertyName)

                            {

                                string propertyJsonName = reader.Value.ToString();

                                var propertyName = propertyJsonName;//JsonNameToPropertyName(propertyJsonName);



                                PropertyInfo propertyInfo = properties.FirstOrDefault(c => (c.Name == propertyName));



                                if (propertyInfo != null)

                                {

                                    ignoreThisProperty = false;



                                    var propertyType = propertyInfo.PropertyType;

                                    if (propertyType.IsEnum)

                                    {

                                        handlingMethod = HandlingMethod.SimpleEnum;

                                    }

                                    else if (propertyType.IsGenericType && propertyType.GetGenericArguments()[0].IsEnum)

                                    {

                                        elementType = propertyType.GetGenericArguments()[0];

                                        handlingMethod = HandlingMethod.ListOfEnum;

                                    }

                                    else if (propertyType.IsGenericType &&

                                             propertyType.GetGenericArguments()[0].IsSerializable)

                                    {

                                        elementType = propertyType.GetGenericArguments()[0];

                                        handlingMethod = HandlingMethod.ListOfSerializable;

                                    }

                                    else if (propertyType.IsArray && propertyType.GetElementType().IsEnum)

                                    {

                                        elementType = propertyType.GetElementType();

                                        handlingMethod = HandlingMethod.ArrayOfEnum;

                                    }

                                    else if (propertyType.IsArray)

                                    {//e.g. string[]

                                        elementType = propertyType.GetElementType();

                                        handlingMethod = HandlingMethod.ArrayOfString;

                                    }

                                    else

                                    {

                                        handlingMethod = HandlingMethod.DoNothing;

                                    }

                                }

                                else

                                {

                                    ignoreThisProperty = true;

                                    continue;

                                }

                                newKey = propertyJsonName;//JsonNameToPropertyName(propertyJsonName);

                                writer.WritePropertyName(newKey);

                            }

                            else if (reader.TokenType == JsonToken.String || reader.TokenType == JsonToken.Integer)

                            {

                                if (ignoreThisProperty)

                                    continue;



                                string value = reader.Value.ToString();

                                if (handlingMethod == HandlingMethod.SimpleEnum)

                                {

                                    int code;

                                    if (int.TryParse(value, out code))

                                    {

                                        writer.WriteValue(code);

                                    }

                                    else

                                    {

                                        var intList = value.ToIntList();

                                        if (intList != null && intList.Count > 0)

                                        {

                                            writer.WriteValue(intList[0]);

                                        }

                                        else

                                        {

                                            writer.WriteNull();

                                        }

                                    }

                                }

                                else if (handlingMethod == HandlingMethod.ListOfEnum ||

                                         handlingMethod == HandlingMethod.ArrayOfEnum ||

                                    handlingMethod==HandlingMethod.ArrayOfString || 

                                         handlingMethod == HandlingMethod.ListOfSerializable)

                                {

                                    CreateJsonArray(writer, handlingMethod, value, arrayLevel);

                                }

                                else

                                {

                                    writer.WriteValue(value);

                                }

                            }

                            else

                            {

                                //Json Clone

                                switch (reader.TokenType)

                                {

                                    case JsonToken.Comment:

                                        writer.WriteComment(reader.Value.ToString());

                                        break;

                                    case JsonToken.EndArray:

                                        writer.WriteEndArray();

                                        arrayLevel--;

                                        break;

                                    case JsonToken.EndConstructor:

                                        writer.WriteEndConstructor();

                                        break;

                                    case JsonToken.EndObject:

                                        writer.WriteEndObject();

                                        break;

                                    case JsonToken.None:

                                        break;

                                    case JsonToken.Null:

                                        writer.WriteNull();

                                        break;

                                    case JsonToken.StartArray:

                                        writer.WriteStartArray();

                                        arrayLevel++;

                                        break;

                                    case JsonToken.StartConstructor:

                                        writer.WriteStartConstructor(reader.Value.ToString());

                                        break;

                                    case JsonToken.StartObject:

                                        writer.WriteStartObject();

                                        break;

                                    case JsonToken.Undefined:

                                        writer.WriteUndefined();

                                        break;

                                    default:

                                        writer.WriteValue(reader.Value);

                                        break;

                                }

                            }

                        }



                        return sw.ToString();

                    }

                }

            }

        }



        private static void CreateJsonArray(JsonTextWriter writer, HandlingMethod handleingMethod, string value, int arrayLevel)

        {

            IList valueList;

            if (handleingMethod == HandlingMethod.ListOfEnum || handleingMethod == HandlingMethod.ArrayOfEnum)

            {

                valueList = value.ToIntList();

            }

            else

            {

                valueList = value.ToStringList();

            }



            if (valueList.Count > 0)

            {

                if (arrayLevel == 0)

                {

                    writer.WriteStartArray();

                }



                foreach (var i in valueList)

                {

                    writer.WriteValue(i);

                }



                if (arrayLevel == 0)

                {

                    writer.WriteEndArray();

                }

            }

            else

            {

                if (arrayLevel == 0)

                {

                    writer.WriteStartArray();

                    writer.WriteEndArray();

                }

            }

        }



    }



}

 

相关代码下载

 

 

你可能感兴趣的:(jQuery ajax)