2011-02-17 45 views
1

在视图上,我在循环内调用Render动作,该动作将创建一个对象数组,并返回带有网格的PartialView以显示结果。RenderAction的怪异行为

查看:

foreach (var item in Model) 
<%Html.RenderAction("GridData", "Customer", new {passidx = (new Random().Next(50))});%> 

控制器:

public ActionResult GridData(int passidx) 
    { 
     List<Customer> cList = new List<Customer>{new Customer() { name = "c" + (1 + passidx).ToString(), address = "a" + (1 + passidx).ToString() }, 
                new Customer() { name = "c" + (2 + passidx).ToString(), address = "a" + (2 + passidx).ToString() }}; 

     return View(cList); 
    } 

大约2每3次,我刷新页面在网格的每个元素的值是即使我传递一个相同的随机数字附加到显示的文本附加到每个操作。

回答

2

而不是呼叫new Random()foreach,声明foreach之前的一个实例。你正在复制,因为它使用相同的种子。

看到这个great answer

例子:

Random random = new Random(); 
foreach (var item in Model) 
<%Html.RenderAction("GridData", "Customer", new {passidx = (random.Next(50))});%> 
+0

这是注意与随机,如果我改变它声明一个Int并在循环中增加它然后通过这个int完全相同的行为发生 – keitn 2011-02-17 14:09:14

0

看起来它是造成问题的变量的作用域。如果我在循环内部声明了Random或int或其他东西,那么它不起作用,所以在外面移动它就行了。