ASP.NET MVC从视图传递多个模型到Controller

简介: 从后台组织好数据然后传递到页面倒是水到渠成很方便,因为MVC自身就将这样的需求内建到了这个系统中。我只需要在后台组织好一个List 或IEnumerable类型的变量,将需要传递的数据模型扔进去便可。   比如这里我们向视图返回5条product信息在页面进行展示,仅仅是返回这么简单。

从后台组织好数据然后传递到页面倒是水到渠成很方便,因为MVC自身就将这样的需求内建到了这个系统中。我只需要在后台组织好一个List 或IEnumerable类型的变量,将需要传递的数据模型扔进去便可。

 

比如这里我们向视图返回5条product信息在页面进行展示,仅仅是返回这么简单。

 

然后在页面我们就毫不费力地得到了后台传过来的数据模型,然后进行显示即可。

 

但问题是,如何又将多个模型传回后台去呢。一个form一般只传递一个模型,我们可以在JavaScript里序列化多个模型然后通过ajax 传递回去。

1.首先改造页面,假设在页面有很多输入框供用户输入模型的相关信息,并且搞一个按扭来提交。

<table>
    @foreach (Product item in Model)
    {
        <tr id="@item.ProductID">
            <td>
                <input name="ProductName" />
            </td>
            <td>
                <input name="SupplierID" />
            </td>
            <td>
                <input name="CategoryID" />
            </td>
        </tr>
    }
</table>
<button id="go">Go</button>

 

 

 

2.然后在JavaScript中获取这些输入值,最后将所有模型整合到一个models变量中。

  var models = [];
    $.each($("table tr"), function(i, item) {
        var ProductName = $(item).find("[name=ProductName]").val();
        var SupplierID = $(item).find("[name=SupplierID]").val();
        var CategoryID = $(item).find("[name=CategoryID]").val();
        models.push({ ProductName: ProductName, SupplierID: SupplierID, CategoryID: CategoryID });
    });

 

当然这些是写到按扭的单击事件中的。

所以完整的代码看起来应该是这个样子。

<script type="text/javascript">
    $("#go").click(function() {
        var models = [];
        $.each($("table tr"), function(i, item) {
            var ProductName = $(item).find("[name=ProductName]").val();
            var SupplierID = $(item).find("[name=SupplierID]").val();
            var CategoryID = $(item).find("[name=CategoryID]").val();
            models.push({ ProductName: ProductName, SupplierID: SupplierID, CategoryID: CategoryID });
        });
    });
</script>

 

到这里我们可以加个debugger测试一下有没有有前台代码中成功获取到输入框的值及组织好的模型对不对。

在页面按F12打开开发者工具,然后试着在页面输入一些值,最后单击按扭。

 

我们看到,在遍历了所有输入框后,以每行为单位当成一个Product模型,压入models变量中。这个时候,models变量中保存了所有信息。

3.准备后台接收数据的Action 。我们当然是接收多个模型,所以接收类型选择为List<Product>

 

        public ActionResult ReceiveData(List<Product> products)
        {
            string result = products == null ? "Failed" : "Success";
            return Content(result);
        }

 

4.最后一步,将models变量通过Ajax传送到后台

这一步是最关键的,因为ajax格式没写好后台是无法接收到正确的数据的。经过我颇费心神的研究最后得出的ajax代码大概是下面这个样子的:

 

  $.ajax({
        url: '../../Home/ReceiveData',
        data: JSON.stringify(models),
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        success: function(msg) {
            alert(msg);
        }
    });

 

最后完整的前台代码大概应该是这个样子的。

<script type="text/javascript">
    $(function() {
        $("#go").click(function() {
            var models = [];
            $.each($("table tr"), function(i, item) {
                var ProductName = $(item).find("[name=ProductName]").val();
                var SupplierID = $(item).find("[name=SupplierID]").val();
                var CategoryID = $(item).find("[name=CategoryID]").val();
                models.push({ ProductName: ProductName, SupplierID: SupplierID, CategoryID: CategoryID });
            });

            $.ajax({
                url: '../../Home/ReceiveData',
                data: JSON.stringify(models),
                type: 'POST',
                contentType: 'application/json; charset=utf-8',
                success: function(msg) {
                    alert(msg);
                }
            });
        });
    })
</script>

 

5.调试看结果

 

结果显示我们接收到了前台传过来的每一个数据,完工。

目录
相关文章
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
41 0
|
21小时前
|
机器学习/深度学习 存储 计算机视觉
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现-4
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现
25 11
|
6天前
|
算法
r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现
r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现
15 1
|
7天前
|
算法
r语言中对LASSO,Ridge岭回归和Elastic Net模型实现
r语言中对LASSO,Ridge岭回归和Elastic Net模型实现
11 0
|
14天前
|
机器学习/深度学习 数据挖掘 Go
中科院二区7.4分|NET基因肿瘤分型+生存预后模型+分子对接
在《Journal of Translational Medicine》上发表的最新研究中,科学家们鉴定了一种新的NET相关基因签名,用于预测弥漫性大B细胞淋巴瘤(DLBCL)患者的预后。他们发现8个基因(PARVB,LYZ,PPARGC1A,HIF1A,SPP1,CDH1,S100A9和CXCL2)与DLBCL生存率显著相关,建立了NRG遗传风险模型,该模型可能有助于指导DLBCL的治疗选择。研究包括基因表达数据的分析、预后特征的构建和验证,以及与免疫微环境和潜在治疗靶点的相关性探索。
17 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
95 5
|
2月前
|
机器学习/深度学习 编解码 并行计算
SegNetr来啦 | 超越UNeXit/U-Net/U-Net++/SegNet,精度更高模型更小的UNet家族
SegNetr来啦 | 超越UNeXit/U-Net/U-Net++/SegNet,精度更高模型更小的UNet家族
42 0
|
4月前
|
算法 数据库 计算机视觉
【计算机视觉】FCN、Seg-Net、U-Net模型进行图像分割实战(附源码和数据集 超详细必看)
【计算机视觉】FCN、Seg-Net、U-Net模型进行图像分割实战(附源码和数据集 超详细必看)
75 1
|
4月前
|
XML 前端开发 JavaScript
SpringMVC中单独配置<mvc:default-servlet-handler/> 导致 Controller失效
SpringMVC中单独配置<mvc:default-servlet-handler/> 导致 Controller失效
75 0
|
5月前
|
开发框架 前端开发 API
私有化部署大模型:5个.Net开源项目
私有化部署大模型:5个.Net开源项目
78 0