Domanda

On a View I am calling Render action with from within a loop, the action will create an array of objects and return to a PartialView with a Grid to display the results.

View:

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

Controller:

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

Roughly 2 out of every 3 times I refresh the page the values for each element in the grids are the same even though I am passing a random number to each Action which is appended to the displayed text.

È stato utile?

Soluzione

instead of calling new Random() in foreach, declare one instance before foreach. you are getting duplicate because it is using same seed.

See this great answer.

Example:

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

Altri suggerimenti

It looks like it's the scope of the variable that's causing the problem. If I declare Random or int or whatever inside the loop it doesn't work, moving it outside does.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top