mvc 从视图传递到Controller 多个不同的实体类接收如何做呢?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mvc 从视图传递到Controller 多个不同的实体类接收如何做呢?相关的知识,希望对你有一定的参考价值。
如图后台是这样的
前台怎么用ajax 怎么构造才能让后台接收呢。
是不同的实体类。还望高手解答
定义的两个类Person和Schoole(注意这两个类中都有Name属性)
然后是ajax的写法,因为MVC数据绑定是根据属性name进行匹配的,
所以在ajax的data中,需要定义一个包含上边两个class的所有属性的对象,这里需要注意,后台的两个类最好不要有同名的属性,如果有同名的属性,但需要的是不同值,前台这块就不能处理了(上边的两个类都有Name属性,所以都controller中时,都被绑定为”Deep“了)
再看到controller中,两个类都被初始化成功了。
参考技术A做MVC的话一般不推荐这种写法,过于复杂,不过技术上还是能实现的,利用BindAttribute
public class ClassApublic string Name get; set;
public int ID get; set;
public class ClassB
public string Title get; set;
public int ID get; set;
public ActionResult ManyModel([Bind(Prefix = "A")]ClassA a, [Bind(Prefix = "B")]ClassB b)
return View();
然后是Ajax
jQuery.ajax(url: "/home/ManyModel",
data: "A.Name": "Tom", "A.ID": 1, "B.Title": "Developer", "B.ID": 2 ,
type: "POST"
);
主要就是利用BindAttribute的Prefix设置绑定规则,这里就是A开头的绑定到a,B开头的绑定到b,实际写的时候是带点的,后面跟Model的属性名
当然还可以使用BindAttribute的Include和Exclude来进行区分
如果不是Ajax而是直接表单提交,注意表单控件的name保持上述规则即可
参考:
http://msdn.microsoft.com/zh-cn/library/system.web.mvc.bindattribute.aspx
如何使用 ajax get 将数据从 View 传递到 Controller 或使用参数在 mvc 中发布
【中文标题】如何使用 ajax get 将数据从 View 传递到 Controller 或使用参数在 mvc 中发布【英文标题】:how to pass data from View to Controller using ajax get or post in mvc with parameters 【发布时间】:2013-04-02 15:16:17 【问题描述】:我正在尝试使用 ajax 将数据从视图传递到控制器操作方法,如下所示:-
我有用户的 Membership 实例,我使用 viewbag 从另一个控制器传递到下面的这个视图,有点像这个 ViewBag.MyUser = MyUser;
现在我想使用 ajax 将“MyUser”传递给另一个控制器,如下所示。
$('#Link').click(function ()
$.ajax(
url: http://localhost/Account/Process,
type: 'POST',
data: '@ViewBag.MyUser',
success: function ()
,
error: function ()
);
我发帖的ActionMethod如下
public ActionResult Process(MembershipUser MyUser)
//Do somethihng with MyUser
如果我通过 do ajax post,我会在 BeginExecuteCore(AsyncCallback callback, object state)
内部收到错误,指出“没有为此对象定义无参数构造函数。”我的操作方法甚至都没有控制权。
如果我从 Action Method 中删除参数 (MembershipUser MyUser)
,它会发布到 Action 方法,但是
-
在这种情况下,如果没有参数,我如何将“MyUser”从该视图传递给控制器?
路线有问题吗?如果是,路线应该是什么?
或者我应该使用 get 还是 post ?
我应该在哪里将 MyUser 转换回 MembershipUser ?
【问题讨论】:
【参考方案1】:问题是您不能将 MyUser 作为 JQuery 的参数传递,因为 JQuery 不知道类 MembershipUser。请记住,JQuery 是一种客户端语言,而 MembershipUser 是在服务器端的 C# 中定义的。
您可以使用 GET 将 MyUser 对象中所需的属性传递给 Process 操作,如下所示(假设 MyUser 对象有一个 ID 和一个 Name):
$('#Link').click(function ()
$.ajax(
url: http://localhost/Account/Process,
type: 'GET',
data:
id: "@ViewBag.MyUser.ID",
name: "@ViewBag.MyUser.Name"
,
success: function ()
,
error: function ()
);
动作应该是这样的:
public ActionResult Process(int id, string name)
//Do something
希望对你有帮助!
【讨论】:
谢谢!!这有帮助。但我仍然不确定为什么我们不能将“MembershipUser”作为对象发送并将其转换回操作方法。 这是因为不能通过 ajax 传递“object”类型的数据。它必须是一个字符串...以上是关于mvc 从视图传递到Controller 多个不同的实体类接收如何做呢?的主要内容,如果未能解决你的问题,请参考以下文章
java springmvc 页面枚举类型作为怎样查询条件并传递参数到controller
ASP.Net MVC 将数据从视图传递到不同文件夹中的控制器