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 ClassA

    public 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# 中定义的。

您可以使用 GETMyUser 对象中所需的属性传递给 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

将约束从视图传递到控制器 (MVC)

在 PHP MVC 应用程序中将数据从控制器传递到视图

ASP.Net MVC 将数据从视图传递到不同文件夹中的控制器

ASP.NET MVC - 使用 C# 将引用不同程序集的模型从控制器传递到视图

MVC多个数据模型传递给一个视图[重复]