2

所以我有一个数字数组,我要发布到一个 asp.net mvc 动作,它有一个 list(of integer) 参数,而且效果很好。
我的问题是这样的:

假设列表(整数)的数字与我发布的数组中的数字顺序相同,是否安全?

谢谢你的时间!

编辑:

发布的数据如下所示:

POSTDATA=model.LevelIds=6&model.LevelIds=19&model.LevelIds=16&model.LevelIds=21&model.LevelIds=18

我正在使用 Tamper Data firefox 插件来查看它。

我在传统模式下使用 jQuery。

编辑:

动作看起来像这样:

public function Create(byval model as thecreateviewmodel) as actionresult

thecreatviewmodel 有很多属性,但有趣的是...

Public Property LevelIdsAs IList(Of Integer) = New List(Of Integer)

在客户端,视图模型是使用 javascript/jquery 构建的:

function NewEntityDataBuilder() {
    var theData = { 
        'model.Name' : $('#Name').val(),
        'model.Description' : $('#Description').val(),
        'model.LevelIds' : $('#LevelIds').val()
    };
    return theData;
}

该函数是从这段 javascript 调用的,它基本上通过并将列表中的所有内容添加到下拉列表(选择控件)并全部选择它们。

$('#LevelIds').empty();
$('#AddedLevels').children().each(function () {
$('#LevelIds').append("<option value='" + $(this).attr('LevelId') + "'>" + $(this).attr('LevelId') + "</option>");
        });

$('#LevelIds').children().attr('selected', 'selected');  //select all the options so they get posted.

var dataToPost = NewEntityDataBuilder();   

当它这样说时,这似乎相当复杂,但它实际上相当简单。它都是 2 个连接的拖放列表的一部分,它们是表单的一部分。

所以:如果我将选择列表的值及其所有选项放在一个变量中,并将其发布到 ilist(整数),ilist 将按照与选择中相同的顺序排列它们。好像他们是。但这只是巧合吗?

4

1 回答 1

0

通常索引是参数名称的一部分:

ints[0]=0&ints[2]=2&ints[1]=1

如果您有一个如下所示的控制器操作:

public ActionResult Index(List<int> ints)
{
    // ints[0] = 0
    // ints[1] = 1
    // ints[2] = 2
    return View();
}

更新:

假设您在查询字符串中有多个同名的参数。此查询字符串将由 ASP.NET 引擎通过本机HttpRequest对象进行解析,并将其转换为NameValueCollection,更准确地说,是一个名为HttpValueCollection. 这个类是 ASP.NET 内部的,这意味着它没有被记录,它可能会随着 .NET 的版本而改变。用 Reflector 看它,FillFromString它的实现方式似乎保持了顺序。但这是我不会依赖的东西。

于 2010-06-25T08:27:28.427 回答