Search Results

Search found 18161 results on 727 pages for 'cell array'.

Page 62/727 | < Previous Page | 58 59 60 61 62 63 64 65 66 67 68 69  | Next Page >

  • Perl, Array called by scalar doesn't work in foreach loop.

    - by foxhop
    This code outputs the scalars in the row array properly: $line = "This is my favorite test"; @row = split(/ /, $line); print $row[0]; print $row[1]; The same code inside a foreach loop doesn't print any scalar values: foreach $line (@lines){ @row = split(/ /, $line); print $row[0]; print $row[1]; } What could cause this to happen? I am new to perl coming from python. I need to learn perl for my new position.

    Read the article

  • Is it possible to reinterpret pointer as dimensioned array reference?

    - by aaa
    hi. Suppose I have some pointer, which I want to reinterpret as static dimension array reference: double *p; double (&r)[4] = ?(p); // some construct? // clarify template< size_t N> void function(double (&a)[N]); ... double *p; function(p); // this will not work. // I would like to cast p as to make it appear as double[N] Is it possible to do so? how do I do it?

    Read the article

  • How to get the required value displayed from the given array?

    - by Parth
    From below array i want the value of "_sql" to be displayed or we can I want to echo the "_sql" value, so what should be the syntax to display it in PHP code? JTableMenu Object ( [lft] => [rgt] => [home] => [_tbl] => #__menu [_tbl_key] => id [_db] => JDatabaseMySQL Object ( [name] => mysql [_nullDate] => 0000-00-00 00:00:00 [_nameQuote] => ` [_sql] => INSERT INTO `jos_menu` ( `id`,`menutype`,`name`,`alias`,`link`,`type`,`published`,`componentid`,`parent`,`ordering`,`checked_out`,`checked_out_time`,`brow............ [_errorNum] => 0 ) )

    Read the article

  • How to print a specific value in array in PHP?

    - by cateye
    array(2) { [0]=> object(stdClass)#144 (7) { ["id"]=> string(1) "2" ["name"]=> string(8) "name1" ["value"]=> string(22) "Lorem Ipsum Dolar Amet" ["type"]=> string(8) "textarea" ["group"]=> string(1) "1" ["published"]=> string(1) "1" ["ordering"]=> string(1) "1" } [1]=> object(stdClass)#145 (7) { ["id"]=> string(1) "4" ["name"]=> string(6) "Link1" ["value"]=> string(36) "abcabcab" ["type"]=> string(4) "link" ["group"]=> string(1) "1" ["published"]=> string(1) "1" ["ordering"]=> string(1) "2" } } I want to print only "value" (abcabcab) of id=4. How can I achieve this?

    Read the article

  • How Can I Set Up a "Where" Statement with a PHP Array

    - by Ryan
    Am I able to apply "where" statements to PHP arrays, similar to how I would be able to apply a "where" statement to a MySQL query? For example, suppose I have the following array: $recordset = array( array('host' => 1, 'country' => 'fr', 'year' => 2010, 'month' => 1, 'clicks' => 123, 'users' => 4), array('host' => 1, 'country' => 'fr', 'year' => 2010, 'month' => 2, 'clicks' => 134, 'users' => 5), array('host' => 1, 'country' => 'fr', 'year' => 2010, 'month' => 3, 'clicks' => 341, 'users' => 2), array('host' => 1, 'country' => 'es', 'year' => 2010, 'month' => 1, 'clicks' => 113, 'users' => 4), array('host' => 1, 'country' => 'es', 'year' => 2010, 'month' => 2, 'clicks' => 234, 'users' => 5), array('host' => 1, 'country' => 'es', 'year' => 2010, 'month' => 3, 'clicks' => 421, 'users' => 2), array('host' => 1, 'country' => 'es', 'year' => 2010, 'month' => 4, 'clicks' => 22, 'users' => 3), array('host' => 2, 'country' => 'es', 'year' => 2010, 'month' => 1, 'clicks' => 111, 'users' => 2), array('host' => 2, 'country' => 'es', 'year' => 2010, 'month' => 2, 'clicks' => 2, 'users' => 4), array('host' => 3, 'country' => 'es', 'year' => 2010, 'month' => 3, 'clicks' => 34, 'users' => 2), array('host' => 3, 'country' => 'es', 'year' => 2010, 'month' => 4, 'clicks' => 1, 'users' => 1),); How can I limit the output to only show the keys and values related to 'host' 1 and 'country' fr? Any help would be great.

    Read the article

  • In Ruby, how do I make a hash from an array?

    - by Wizzlewott
    I have a simple array: arr = ["apples", "bananas", "coconuts", "watermelons"] I also have a function f that will perform an operation on a single string input and return a value. This operation is very expensive, so I would like to memoize the results in the hash. I know I can make the desired hash with something like this: h = {} arr.each { |a| h[a] = f(a) } What I'd like to do is not have to initialize h, so that I can just write something like this: h = arr.(???) { |a| a => f(a) } Can that be done?

    Read the article

  • C++, is it possible to obtain the dimension of an array?

    - by aaa
    hi. Suppose I have some pointer, which I want to reinterpret as static dimension array reference: double *p; double (&r)[4] = ?(p); // some construct? // clarify template< size_t N> void function(double (&a)[N]); ... double *p; function(p); // this will not work. // I would like to cast p as to make it appear as double[N] Is it possible to do so? how do I do it?

    Read the article

  • Perl numerical sorting: how to ignore leading alpha character [migrated]

    - by Luke Sheppard
    I have a 1,660 row array like this: ... H00504 H00085 H00181 H00500 H00103 H00007 H00890 H08793 H94316 H00217 ... And the leading character never changes. It is always "H" then five digits. But when I do what I believe is a numerical sort in Perl, I'm getting strange results. Some segments are sorted in order, but then a different segment starts up. Here is a segment after sorting: ... H01578 H01579 H01580 H01581 H01582 H01583 H01584 H00536 H00537 H00538 H01585 H01586 H01587 H01588 H01589 H01590 ... What I'm trying is this: my @sorted_array = sort {$a <=> $b} @raw_array; But obviously it is not working. Anyone know why?

    Read the article

  • Best container to store this information

    - by user2368481
    I'm trying to write a smallish system as a homework excercise, I don't have much experience with containers and I'm not sure the best way of storing this data would be: Incident Records object holds instants of Incident Report. Report is a superclass which has 3 subclasses, Police, Fire or Medical. Record must must record which of these types apply, and which response teams are to be involved. So Record has to keep track of the Report objects, the type of the report (Police, Fire or Medical) and the teams involved in the reports. I was initially thinking of an array but that wouldn't be sufficient to hold all the info. Record<>---------Report<|----------Police, Fire or Medical

    Read the article

  • Adding a dynamic image to UITable View Cell

    - by Graeme
    Hi, I have a table in which I want a dynamic image to load in at the left-hand side. The table needs to use an IF statement to select the appropriate image from the "Resources" folder, and needs to be based upon [dog types]. The [dog types] is extracted from an RSS feed, and so the image in the table cell needs to match the each cell's [dog types] tag. Update: See code below for what I'm looking to do (only below it's for earthquakes, for me its pictures of dogs). I suspect I need to use - (UIImage *)imageForTypes:(NSString *)types { to do such a thing. Thanks. Updated code: This is for Apple's Earthquake sample but does exactly what I need to do. It matches images to the severity (2.0, 3.0, 4.0, 5.0 etc.) of every earthquake to the magnitude. - (UIImage *)imageForMagnitude:(CGFloat)magnitude { if (magnitude >= 5.0) { return [UIImage imageNamed:@"5.0.png"]; } if (magnitude >= 4.0) { return [UIImage imageNamed:@"4.0.png"]; } if (magnitude >= 3.0) { return [UIImage imageNamed:@"3.0.png"]; } if (magnitude >= 2.0) { return [UIImage imageNamed:@"2.0.png"]; } return nil; } and under - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath magnitudeImage.image = [self imageForMagnitude:earthquake.magnitude];

    Read the article

  • CSS menu broken in Firefox (display:table-cell;)

    - by roman m
    HTML: <td align="center" width="100%"> <a class="Forum_ib_moderate" href="Default.aspx" title="Moderate"></a> <a class="Forum_ib_admin" href="Default.aspx" title="Admin"></a> ... CSS: A.Forum_ib_moderate:link, A.Forum_ib_moderate:visited, A.Forum_ib_moderate:active, A.Forum_ib_moderate:hover { background-image: url(images/ib_moderate.png); background-repeat: no-repeat; background-position: center; padding-left: 2px; padding-right: 2px; padding-top: 8px; padding-bottom: 0px; height: 35px; width: 35px; display:table-cell; } A.Forum_ib_admin:hover { background-image: url(images/ib_admin_hover.png); } the menu looks just fine in IE, shows up vertical in Firefox. If i turn off "display:table-cell;" style in Firebug and then turn it back on, it fixes that menu node. any ideas? p.s.: i don't want to mess with the menu itself, since it's a part of a DNN Forum 4.4.3. I'd rather fix the CSS to make it show correctly.

    Read the article

  • Stop Excel from changing cell contents, ever

    - by Enable Manual-Correct
    I work with card numbers, like credit card and ID numbers. We do not do any calculations with card numbers, obviously. They are "text." I format them as text, I type them like text. I know how that works. Excel doesn't care. 16 digit card numbers get their last digit turned into a zero, changed into scientific notation, stupid stuff that I did not tell Excel to do. I need to do things like Find/Remove spaces from cells in files downloaded from our currently imperfect web-system. The system sends me files with 16 digit numbers, cells formatted as text, but due to bugs there are spaces at the end. I do Find/Remove all spaces and all my card numbers are transformed into scientific notation and the last digit turned into a 0. THEY ARE TEXT, they are formatted as text, I yelled into the screen that they are text, why does Excel refuse to acknowledge that they are text? (I would rather find a way to stop Excel's action than find a way to tell our programmers to put an apostrophe in every cell) How do I make it so that Excel just STOPS doing anything that I didn't tell it to do? Or at least stop it from doing anything to numbers it doesn't like. Maybe I can write a macro for whenever it discovers "Uhoh I should change that number to something different!" I'll make it format that cell to text a thousand times instead. Give me an error when I try calculating with a number larger than 15 digits, make my computer explode violently, that's fine. Just stop changing the numbers. Is it possible? I have many thousands of numbers that need changing in many different scenarios. I just want to stop it from trying to help. I can't understand why that would be difficult. I have 2007, but answers for other versions would be great as well. Thank you!

    Read the article

  • Pass a range into a custom function from within a cell

    - by Luis
    Hi I'm using VBA in Excel and need to pass in the values from two ranges into a custom function from within a cell's formula. The function looks like this: Public Function multByElement(range1 As String, range2 As String) As Variant Dim arr1() As Variant, arr2() As Variant arr1 = Range(range1).value arr2 = Range(range2).value If UBound(arr1) = UBound(arr2) Then Dim arrayA() As Variant ReDim arrayA(LBound(arr1) To UBound(arr1)) For i = LBound(arr1) To UBound(arr1) arrayA(i) = arr1(i) * arr2(i) Next i multByElement = arrayA End If End Function As you can see, I'm trying to pass the string representation of the ranges. In the debugger I can see that they are properly passed in and the first visible problem occurs when it tries to read arr1(i) and shows as "subscript out of range". I have also tried passing in the range itself (ie range1 as Range...) but with no success. My best suspicion was that it has to do with the Active Sheet since it was called from a different sheet from the one with the formula (the sheet name is part of the string) but that was dispelled since I tried it both from within the same sheet and by specifying the sheet in the code. BTW, the formula in the cell looks like this: =AVERAGE(multByElement("A1:A3","B1:B3")) or =AVERAGE(multByElement("My Sheet1!A1:A3","My Sheet1!B1:B3")) for when I call it from a different sheet.

    Read the article

  • jeditable table cell

    - by user666262
    Hi all, I am having an issue when using jeditable to edit a cell in a table. The project is the MVC 2 web application and the table has been put on the standard about page. How do i tell the script to call a specific method in the controller ? because it is currently just loading the entire page into the cell. This is the javascript: $(document).ready(function () { $('.editable').editable('http://localhost:2196/Home/About', { type: 'text', cancel: 'Cancel', event: 'dblclick', submit: 'OK', tooltip: 'double Click to edit...' }); }); This is the table : <% foreach (DataTableEditable.Models.Company item in (IEnumerable<DataTableEditable.Models.Company>)Model) {%> <tr id="<%= Html.Encode(item.ID) %>"> <td class="editable"><%= Html.Encode(item.Name) %> </td> <td><%= Html.Encode(item.Address) %> </td> <td><%= Html.Encode(item.Town) %> </td> </tr> <% }%> Thanks lots John

    Read the article

  • Getting a table cell to become a different color on mouseover

    - by Andrei Korchagin
    Currently, when I create a table, and I mouseover a cell, that entire row is highlighted. I'm trying to make it so that it is only the immediate cell. Here's all the CSS code that pertains to tables in my stylesheet: table{margin:.5em 0 1em;} table td,table th{text-align:center;border-right:1px solid #fff;padding:.4em .8em;} table th{background-color:#5e5e5e;color:#fff;text-transform:uppercase;font-weight:bold;border- bottom:1px solid #e8e1c8;} table td{background-color:#eee;} table th a{color:#d6f325;} table th a:hover{color:#fff;} table tr.even td{background-color:#ddd;} table tr:hover td{background-color:#fff;} table.nostyle td,table.nostyle th,table.nostyle tr.even td,table.nostyle tr:hover td{border:0;background:none;background-color:transparent;} I know it's probably a simple fix but I can't find where to make it work. Everything I try just kills the mouseover effect entirely rather than making it the way I want it. Thanks in advance!

    Read the article

  • Textbox extends outside of the grid cell in .Net 4.0 (but not in 3.5)

    - by Bryant
    There seems to be a change in behaviour between .Net 3.5 and .Net 4.0. If I define a window as: <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="500" > <Grid> <Grid.ColumnDefinitions> <ColumnDefinition MinWidth="300" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <TextBox Grid.Column="1" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Auto" Text="abc abc abc abc abc abc abc abc abcabc abc abcabc abc abc abc abc abc" /> </Grid> </Window> In .Net 3.5 the textbox correctly contains itself within the grid cell but in .Net 4.0 it extends beyond the cell and so gets clipped. This only happens if the MinWidth of the first column is greater than 50% of the overall width. Does anyone know how to get 4.0 to exhibit the same behavior as 3.5?

    Read the article

  • Give Gridview cell font colour according to condition

    - by vim
    How can I give colour to gridview's cell text according to condition. I have a below gridview and I am taking data in gridview by code behind. <asp:GridView ID="GridView3" runat="server" AllowPaging="true" PageSize="5" AutoGenerateColumns="false" Width="100%" OnPageIndexChanging="GridView3_PageIndexChanging" CssClass="Grid"> <RowStyle CssClass="GridRow"/> <Columns> <asp:BoundField HeaderText="No" DataField="id" Visible="false"/> <asp:BoundField HeaderText="Scenario" DataField="Scenario"/> <asp:BoundField HeaderText="Type" DataField="Type"/> <asp:BoundField HeaderText="Station Name" DataField="StationName"/> <asp:BoundField HeaderText="Parameter" DataField="PARAM"/> <asp:BoundField HeaderText="Value" DataField="Value" SortExpression="Value" DataFormatString="{0:F2}"/> </Columns> <PagerStyle BackColor="White" Height="40px" Font-Bold="true" Font- Size="Medium" ForeColor="Green" HorizontalAlign="Center"/> <PagerSettings FirstPageText="First" LastPageText="Last" Mode="NumericFirstLast" PageButtonCount="3" /> <HeaderStyle BackColor="#ABDB78" ForeColor="Black" Height="35px" Font- Size="13px" Font-Names="verdana"/> </asp:GridView> I am binding data with this grid by code behind. protected void ReservGridBind() { string name = Request.QueryString[1].ToString(); string query = "SELECT SD.id,SD.Scenario,SD.Value,PR.Type,PR.StationName,PR.PARAM from sgwebdb.param_reference as PR Inner join sgwebdb.scenario_data as SD ON PR.Param_Id=SD.Param_Id INNER JOIN sgwebdb.qualicision_detail as Q ON SD.SCENARIO=Q.Alternative where PR.Type='Reservoirs' and Q.Alternative='" + name +"'"; this.GridView1.DataSource = PSI.DataAccess.Database.DatabaseManager .GetConnection().GetData(query); GridView1.DataBind(); condition : if text < 0 then blue colour , text > 0 && text < 4 then green colour, text > 4 then red colour. Please help me for this gridview's cell text colour.

    Read the article

  • How to navigate to a UITableView position by the cell it's title using indexing

    - by BarryK88
    I'm using a UITableView filled with a around 200 cells containing a title, subtitle and thumbnail image. I want to a have a selection method just like within the contact App from Apple where you can select a character from the alphabet. I'm at the point where I've drawn the selection interface (A,B,C etc), and via it's delegate I'm retrieving the respective index and title (i.e: A = 1, B = 2, C = 3 etc.). Now I want to navigate to the first cell, where the first character of the cell it's title is starting with the selected index character. Just like the contacts App. Can someone give me a direction for how to implement such functionality. - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index I filled my sectionIndex by means of - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { if(searching) return nil; NSMutableArray *tempArray = [[NSMutableArray alloc] init]; [tempArray addObject:@"A"]; [tempArray addObject:@"B"]; [tempArray addObject:@"C"]; [tempArray addObject:@"D"]; [tempArray addObject:@"E"]; [tempArray addObject:@"F"]; [tempArray addObject:@"G"]; [tempArray addObject:@"H"]; [tempArray addObject:@"I"]; [tempArray addObject:@"J"]; [tempArray addObject:@"K"]; [tempArray addObject:@"L"]; [tempArray addObject:@"M"]; [tempArray addObject:@"N"]; [tempArray addObject:@"O"]; [tempArray addObject:@"P"]; [tempArray addObject:@"Q"]; [tempArray addObject:@"R"]; [tempArray addObject:@"S"]; [tempArray addObject:@"T"]; [tempArray addObject:@"U"]; [tempArray addObject:@"V"]; [tempArray addObject:@"W"]; [tempArray addObject:@"X"]; [tempArray addObject:@"Y"]; [tempArray addObject:@"Z"]; return tempArray; }

    Read the article

  • How to set the width of a cell in a UITableView in grouped style

    - by Tomen
    I have been working on this for about 2 days, so i thought i share my learnings with you. The question is: Is it possible to make the width of a cell in a grouped UITableView smaller? The answer is: No. But there are two ways you can get around this problem. Solution #1: A thinner table It is possible to change the frame of the tableView, so that the table will be smaller. This will result in UITableView rendering the cell inside with the reduced width. A solution for this can look like this: -(void)viewWillAppear:(BOOL)animated { CGFloat tableBorderLeft = 20; CGFloat tableBorderRight = 20; CGRect tableRect = self.view.frame; tableRect.origin.x += tableBorderLeft; // make the table begin a few pixels right from its origin tableRect.size.width -= tableBorderLeft + tableBorderRight // reduce the width of the table tableView.frame = tableRect; } Solution #2: Having cells rendered by images This solution is described here: http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html I hope this information is helpful to you. It took me about 2 days to try a lot of possibilities. This is what was left.

    Read the article

  • Add inputs to more than one row in a cell array in matlab

    - by ZaZu
    Hi there, I would like to know how can I get certain inputs and put them in more than one row in the cell array ... I basically want an array that updates one input per row in ever loop. The loop is looped 30 times, so I want to have 30 rows and 2 columns ( x and y columns) I have this code : For N=1:30 . . . Binary = bwlabel(blacknwhite); s = regionprops(Binary,'centroid'); centroids = cat(1, s.Centroid); hold(imgca,'on') plot(imgca,centroids(1,1), centroids(1,2),'r*') . . . end I dont think this does what I want ... only the first row is updated in my loop .. So how can I create this cell array ? If you want more info please tell me and I will update it right away. Thanks !

    Read the article

  • Limiting number of text lines in a table cell

    - by Kuzco
    I have a table cell where I need to limit the text to a max of two lines. I tried achieving this by placing an inner div with a limited height: div { border: 1px solid #EECCDD; width: 100px; height: 40px; overflow: hidden; } <div> <p>bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla</p> </div> <div> <p>bla bla bla bla</p> </div> However, in this case the cells which have only one line of text are not vertically aligned to the middle. I know there are ways to vertically align a text within a div, but most of the ones I found seemed a bit complicated and/or hacky (like this one), and felt like a bit of an overkill. Is there a different way to effectively limit the number of lines inside the cell, or a simple way to align the text in the way I did it?

    Read the article

  • Simultaneous read/write to RAID array slows server to a crawl

    - by Jeff Leyser
    Fairly beefy NFS/SMB server (32GB RAM, 2 Xeon quad cores) with LSI MegaRAID 8888ELP controlling 12 drives configured into 3 different arrays. 5 2TB drives are grouped into a RAID 6 array. As expected, write performance to the array is slow. However, sustained, simultaneous read/write to the array (wether through NFS or done locally) seems to practically block any other access to anything else on the controller. For example, if I do: cp /home/joe/BigFile /home/joe/BigFileCopy where BigFile is 20G, then even a simple ls /home/jane will take many 10s of seconds to complete. In addition, an ls /backup will also take many tens of seconds, even though /backup is a different array on the same controller. As soon as the cp is done, everything is back to normal. cp /home/joe/BigFile /backup/BigFile does not exhibit this behavior. It's only when doing read/write to the same array.

    Read the article

  • Expanding RAID 1 array size (Adaptec 1420SA controller)

    - by cincura.net
    I have an Adaptec 1420SA controller in server and RAID 1 array created. The old disks slowly started to report S.M.A.R.T errors so I replaced first one, rebuild array and then other one and rebuild the array again. But the new drives are bigger, so I'd like to expand the array to use full disk capacity. Is it somehow possible? In the Adaptec configuration utility, after POST, I didn't found anything that could do it. I still have the old drives, if it helps. The array is used for system (Windows 2008 R2 SP1) booting. Thanks.

    Read the article

  • NVidia raid 5 array spooling sounds and delay

    - by Chase B. Gale
    I've had a raid 5 array setup with 3 2TB WD Green drives for about 3 years now. Starting last week, when I would access the array for the first time, I hear a loud drive spooling sound and experience a ~5 second delay before being able to access\save files. This behavior happens when I don't use the array for some time (about an hour) and after occurring it doesn't happen again if I continue to access the array. I've run SMART scans on all drives and they come back as being a-ok. What's causing this? Is my array getting close to death?

    Read the article

  • DropDownList and SelectListItem Array Item Updates in MVC

    - by Rick Strahl
    So I ran into an interesting behavior today as I deployed my first MVC 4 app tonight. I have a list form that has a filter drop down that allows selection of categories. This list is static and rarely changes so rather than loading these items from the database each time I load the items once and then cache the actual SelectListItem[] array in a static property. However, when we put the site online tonight we immediately noticed that the drop down list was coming up with pre-set values that randomly changed. Didn't take me long to trace this back to the cached list of SelectListItem[]. Clearly the list was getting updated - apparently through the model binding process in the selection postback. To clarify the scenario here's the drop down list definition in the Razor View:@Html.DropDownListFor(mod => mod.QueryParameters.Category, Model.CategoryList, "All Categories") where Model.CategoryList gets set with:[HttpPost] [CompressContent] public ActionResult List(MessageListViewModel model) { InitializeViewModel(model); busEntry entryBus = new busEntry(); var entries = entryBus.GetEntryList(model.QueryParameters); model.Entries = entries; model.DisplayMode = ApplicationDisplayModes.Standard; model.CategoryList = AppUtils.GetCachedCategoryList(); return View(model); } The AppUtils.GetCachedCategoryList() method gets the cached list or loads the list on the first access. The code to load up the list is housed in a Web utility class. The method looks like this:/// <summary> /// Returns a static category list that is cached /// </summary> /// <returns></returns> public static SelectListItem[] GetCachedCategoryList() { if (_CategoryList != null) return _CategoryList; lock (_SyncLock) { if (_CategoryList != null) return _CategoryList; var catBus = new busCategory(); var categories = catBus.GetCategories().ToList(); // Turn list into a SelectItem list var catList= categories .Select(cat => new SelectListItem() { Text = cat.Name, Value = cat.Id.ToString() }) .ToList(); catList.Insert(0, new SelectListItem() { Value = ((int)SpecialCategories.AllCategoriesButRealEstate).ToString(), Text = "All Categories except Real Estate" }); catList.Insert(1, new SelectListItem() { Value = "-1", Text = "--------------------------------" }); _CategoryList = catList.ToArray(); } return _CategoryList; } private static SelectListItem[] _CategoryList ; This seemed normal enough to me - I've been doing stuff like this forever caching smallish lists in memory to avoid an extra trip to the database. This list is used in various places throughout the application - for the list display and also when adding new items and setting up for notifications etc.. Watch that ModelBinder! However, it turns out that this code is clearly causing a problem. It appears that the model binder on the [HttpPost] method is actually updating the list that's bound to and changing the actual entry item in the list and setting its selected value. If you look at the code above I'm not setting the SelectListItem.Selected value anywhere - the only place this value can get set is through ModelBinding. Sure enough when stepping through the code I see that when an item is selected the actual model - model.CategoryList[x].Selected - reflects that. This is bad on several levels: First it's obviously affecting the application behavior - nobody wants to see their drop down list values jump all over the place randomly. But it's also a problem because the array is getting updated by multiple ASP.NET threads which likely would lead to odd crashes from time to time. Not good! In retrospect the modelbinding behavior makes perfect sense. The actual items and the Selected property is the ModelBinder's way of keeping track of one or more selected values. So while I assumed the list to be read-only, the ModelBinder is actually updating it on a post back producing the rather surprising results. Totally missed this during testing and is another one of those little - "Did you know?" moments. So, is there a way around this? Yes but it's maybe not quite obvious. I can't change the behavior of the ModelBinder, but I can certainly change the way that the list is generated. Rather than returning the cached list, I can return a brand new cloned list from the cached items like this:/// <summary> /// Returns a static category list that is cached /// </summary> /// <returns></returns> public static SelectListItem[] GetCachedCategoryList() { if (_CategoryList != null) { // Have to create new instances via projection // to avoid ModelBinding updates to affect this // globally return _CategoryList .Select(cat => new SelectListItem() { Value = cat.Value, Text = cat.Text }) .ToArray(); } …}  The key is that newly created instances of SelectListItems are returned not just filtered instances of the original list. The key here is 'new instances' so that the ModelBinding updates do not update the actual static instance. The code above uses LINQ and a projection into new SelectListItem instances to create this array of fresh instances. And this code works correctly - no more cross-talk between users. Unfortunately this code is also less efficient - it has to reselect the items and uses extra memory for the new array. Knowing what I know now I probably would have not cached the list and just take the hit to read from the database. If there is even a possibility of thread clashes I'm very wary of creating code like this. But since the method already exists and handles this load in one place this fix was easy enough to put in. Live and learn. It's little things like this that can cause some interesting head scratchers sometimes…© Rick Strahl, West Wind Technologies, 2005-2012Posted in MVC  ASP.NET  .NET   Tweet !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs"); (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();

    Read the article

< Previous Page | 58 59 60 61 62 63 64 65 66 67 68 69  | Next Page >