繁体   English   中英

ASP.NET MVC:将复杂的数据从视图传递到控制器

[英]ASP.NET MVC: Pass complex data from View to Controller

我有一个控制器,它生成以下对象并将其通过ViewBag传递给View:

public class ObjectList
{
  public ObjectItem[] Item { get; set; }
}


public class ObjectItem
{
  public string Name { get; set; }
  public decimal Value1 { get; set; }
  public decimal Value2 { get; set; }
}

在视图中,该数据显示在表格中。 删除表我有一个ActionLink,该ActionLink应该将所有数据传递回Controller进行进一步处理。 我怎样才能做到这一点。 是ActionLink的正确选择,它可以是List中的数百个OjectItem。 还有其他方法吗?

希望您能帮到我。

不知道是否有办法使用MVC,但是我通常要做的是使用jquery遍历表中的项目,将其推送到javascript数组,然后在向MVC控制器发出请求时将数组作为参数传递。

例如:

// Javascript variable that will contain the values
var selectedPositionNumbers = new Array();

// In my case, i store the value of the row when user click a checkbox in the same row
$('body').on('click', 'input[id*="IsSelected"]', function () {
            var positionNr = $(this).attr('id').split("IsSelected")[1];
            var isChecked = $(this).is(':checked');
            if (isChecked) {
                if ($.inArray(positionNr, selectedPositionNumbers) == -1) {
                    selectedPositionNumbers.push(positionNr);
                }
            }
        });

// And later on when making the request
$.ajax({
        url: '@Url.Action("SendSelectedValues")',
        data: JSON.stringify({ positionNrList: selectedPositionNumbers }),
        type: 'post',
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            // Completed statement here
        }
    });

就我而言,我只需要存储一个值,所以我只需要创建一个字符串数组,但是对于您而言,本文可能会提供一个更好的示例: http : //abiyh.blogspot.nl/2011/01/posting-javascript -array-using-jquery.html

如果该信息具有任何重要价值,我肯定会将其副本保存在服务器(数据库,文件系统等)上,并让ActionLink将某种ID提交回服务器以帮助检索它。 您将需要清除“未使用”的数据(例如,从未导出过且不再需要的数据),但是根据您的情况,这可能比冒着用户认为您已发送的数据受到用户控制的风险更安全。

我认为您应该将数据存储在会话中。 当操作链接回发时,您只需获取存储在会话中的数据的版本。

与@JTMon提供的答案一样,如果使用操作链接将数据发送回服务器,则必须验证所有数据(因为它现在是用户输入的,可能已被篡改)。 您可以使用诸如CRC或HMAC检查的机制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM