【问题标题】:Weird behaviour with RenderActionRenderAction 的奇怪行为
【发布时间】:2011-02-17 13:48:25
【问题描述】:

在一个视图上,我在循环中调用 Render 操作,该操作将创建一个对象数组并返回到带有 Grid 的 PartialView 以显示结果。

查看:

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);
    }

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

【问题讨论】:

    标签: asp.net asp.net-mvc renderaction


    【解决方案1】:

    不要在foreach 中调用new Random(),而是在foreach 之前声明一个实例。您正在重复,因为它使用的是相同的种子。

    看到这个great answer

    示例:

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

    【讨论】:

    • 这与 Random 无关,如果我将其更改为声明一个 Int 并在循环中递增它,然后传递此 int 会发生完全相同的行为
    • 更进一步,如果我在控制器中放置一个断点,即使调试视图显示传递了不同的值,该值也始终相同。这几乎就像值被缓存在某个地方
    • @user621477 我已经在我的系统上尝试过(参见示例),它工作正常。
    【解决方案2】:

    看起来是导致问题的变量的范围。如果我在循环内声明 Random 或 int 或其他任何内容都不起作用,则将其移出即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 2015-07-20
      • 2010-10-03
      • 2021-07-12
      • 2013-10-04
      • 2019-01-23
      相关资源
      最近更新 更多