MVC从视图传参到Controller几种方式

来源:互联网 发布:淘宝静物摄影 编辑:程序博客网 时间:2024/05/23 00:03

简单数组传递

var array = ["aaa", "bbb", "ccc"]; $.ajax({       url:"@Url.Action("Test")",       type: "POST",       data: { array: array },       traditional: true //需要写上该属性,Controller才能接收到 }); public ActionResult Test(List<string> array) {            return null;   }


单个模型传递

@using (Html.BeginForm("Test", "Home")) {    <p><input type="text" name="No" value="001"/></p>    <p><input type="text" name="Name" value="Tom" /></p>    <p><input type="text" name="Age" value="24"/></p>    <p><input type="checkbox" name="Courses" value="语文" />        <input type="checkbox" name="Courses" value="数学" />        <input type="checkbox" name="Courses" value="外语" />    </p>    <p><button type="submit">提交</button></p>}public ActionResult Test(Student student) {            return null;        }


多个模型传递

1.方式一

var models = [];                models.push({ No: "001", Name: "Tom", Age: 20, Courses: ["语文", "数学", "外语"] });                models.push({ No: "002", Name: "Jeff", Age: 21, Courses: ["语文", "数学", "外语"] });                models.push({ No: "003", Name: "Hacks", Age: 22, Courses: ["语文", "数学", "外语"] });                $.ajax({                    url: '@Url.Action("Test")',                    data: JSON.stringify(models),//第一个地方,需要进行JSON序列化                    type: 'POST',                    contentType: 'application/json',//第二个地方,需要声明为'application/json',默认'application/x-www-form-urlencoded'                    success: function (data) {                    }                });public ActionResult Test(List<Student> models) {            return null;  }



2.方式二 (Model Binder)

需要借助ModelBinder来处理,添加一个类 :JsonModelBinderAttribute.cs

public class JsonModelBinderAttribute : CustomModelBinderAttribute {        public override IModelBinder GetBinder() {            return new JsonBinder();        }    }    public class JsonBinder : IModelBinder {        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {            //return base.BindModel(controllerContext, bindingContext);            if (controllerContext == null) {                throw new ArgumentNullException("controllerContext");            }            if (bindingContext == null) {                throw new ArgumentNullException("bindingContext");            }            var prefix = bindingContext.ModelName;            string jsonString = controllerContext.RequestContext.HttpContext.Request.Params[prefix];            if (jsonString != null) {                var serializer = new JavaScriptSerializer();                var result = serializer.Deserialize(jsonString, bindingContext.ModelType);                return result;            }            else {                return null;            }        }    }
var models = [];                models.push({ No: "001", Name: "Tom", Age: 20, Courses: ["语文", "数学", "外语"] });                models.push({ No: "002", Name: "Jeff", Age: 21, Courses: ["语文", "数学", "外语"] });                models.push({ No: "003", Name: "Hacks", Age: 22, Courses: ["语文", "数学", "外语"] });                $.ajax({                    url: '@Url.Action("Test")',                    data: { models: JSON.stringify(models) },                    type: 'POST',                    success: function (data) {                    }                });public ActionResult Test([JsonModelBinder]List<Student> models) {            return null;        }













阅读全文
0 0