Search Results

Search found 17785 results on 712 pages for 'model attribute'.

Page 121/712 | < Previous Page | 117 118 119 120 121 122 123 124 125 126 127 128  | Next Page >

  • Rails - How do i update a records value in a join model ?

    - by ChrisWesAllen
    I have a join model in a HABTM relationship with a through association (details below). I 'm trying to find a record....find the value of that records attribute...change the value and update the record but am having a hard time doing it. The model setup is this User.rb has_many :choices has_many :interests, :through => :choices Interest.rb has_many :choices has_many :users, :through => :choices Choice.rb belongs_to :user belongs_to :interest and Choice has the user_id, interest_id, score as fields. And I find the ?object? like so @choice = Choice.where(:user_id => @user.id, :interest_id => interest.id) So the model Choice has an attribute called :score. How do I find the value of the score column....and +1/-1 it and then resave? I tried @choice.score = @choice.score + 1 @choice.update_attributes(params[:choice]) flash[:notice] = "Successfully updated choices value." but I get "undefined method score"......What did i miss?

    Read the article

  • Ruby on Rails: building a model with an attribute not in the database?

    - by randombits
    I have a model that sets one of its attributes based off of a form parameter that a user submits. The model is a child resource to a parent resource Home. A hypothetical example is the following: A class Person has an age attribute. The user submits a birthdate as an HTTP POST parameter and from that, I need to derive the age of the user. So I'd do something like this: @home.people.build(:name => params[:name], :birthdate => params[:birthdate]) Rails would barf on that for obvious reasons, complaining it doesn't know what the attribute birthdate is. What's the proper way of going about this? Is it possible to use the build constructor with the supplied solution so that my foreign key relations are also setup properly? If not, what's a better way to work around this problem?

    Read the article

  • Should I add try/catch around when casting on an attribute of JSP implicit object?

    - by Michael Mao
    Hi all: Basically what I mean is like this: List<String[]> routes = (List<String[]>)application.getAttribute("routes"); For the above code, it tries to get an attribute named "routes" from the JSP implicit object - application. But as everyone knows, after this line of code, routes may very well contains a null - which means this application hasn't got an attribute named "routes". Is this "casting on null" good programming practice in Java or not? Basically I try to avoid exceptions such as java.io.InvalidCastException I reckon things like this are more as "heritage" of Java 1.4 when generic types were not introduced to this language. So I guess everything stored in application attributes as Objects (Similar to traditional ArrayList). And when you do "downcast", there might be invalid casts. What would you do in this case? Update: Just found that although in the implicit object application I did store a List of String arrays, when I do this : List<double[]> routes = (List<double[]>)application.getAttribute("routes"); It doesn't produce any error... And I felt not comfortable already... And even with this code: out.print(routes.get(0)); It does print out something strange : [Ljava.lang.String;@18b352f Am I printing a "pointer to String"? I can finally get an exception like this: out.print(routes.get(0)[1]); with error : java.lang.ClassCastException: [Ljava.lang.String; Because it was me to add the application attribute, I know which type should it be cast to. I feel this is not "good enough", what if I forget the exact type? I know there are still some cases where this sort of thing would happen, such as in JSP/Servlet when you do casting on session attributes. Is there a better way to do this? Before you say:"OMG, why you don't use Servlets???", I should justify my reason as this: - because my uni sucks, its server can only work with Servlets generated by JSP, and I don't really want to learn how to fix issues like that. look at my previous question on this , and this is uni homework, so I've got no other choice, forget all about war, WEB-INF,etc, but "code everything directly into JSP" - because the professors do that too. :)

    Read the article

  • How do I get hyphens in my attribute names in Flex?

    - by John Leonard
    Flex has an issue with hyphens in xml. I need to generate an xml object with hyphens in the attribute for a Google Checkout implementation. I can get away with: var xml:XML = <item-description/>; and var xml:XML = <item-description the-name="foo"/>; but what I need to do is set the value of an attribute like this: var timestamp:String = methodToGetMyTimestampString(); var xml:XML = <item-desc/>; xml@start-date = timestamp; but I can't do that. Since flex doesn't like the hyphens, I don't know how to get or set attributes with hyphens in the name.

    Read the article

  • how to set Custom attribute of NSManagedObject which is calculated from other attributes ?

    - by Kundan
    I am using core data framework to manage objects.i have an entity which has several attributes of decimal types. Among them is attribute which is mathematically calculated from other attributes. Ex :- @interface Marks : NSManagedObject { } @property (nonatomic, retain) NSDecimalNumber * answerGradeA; @property (nonatomic, retain) NSDecimalNumber * answerGradeB; @property (nonatomic, retain) NSDecimalNumber * answerGradeC; @property (nonatomic, retain) NSDecimalNumber * total; Here i want attribute total = 3xanswerGradeA + 2xanswerGradeB + 1xanswerGradeC if it is possible to do like this, then how ? please reply. Thanks in advance.

    Read the article

  • How can I require an attribute on a class definition?

    - by spoulson
    Is there a way to enforce a compile requirement for certain attributes on a class or interface implementation? For example, let's say my application uses a series of static classes that contain const int resource values. I'd like to decorate the class in a Description attribute to describe its contents. In concept, I'd like to apply this attribute requirement to an interface, then each static class would implement it with its required Description. I could write a run-time check or a unit test to check compliance. But really a compile-time check would be best. Is there such a thing?

    Read the article

  • How to config a default global EJB transaction attribute in JBoss Server?

    - by seven
    my project need to migrate from oc4j to jboss. But it seems that default EJB transaction attribute is different between them. For OC4J: If you do not specify any transaction attributes for an EJB method then OC4J uses default transaction attributes. OC4J by default uses Required for CMP 2.0, NotSupported for MDBs and Supports for all other types of EJBs. (refer to official doc) For JBoss: default for all types EJB is Required. (Maybe , refer to un-official site) To migrate my project within less effort, how to config a default global EJB transaction attribute, e.g. Supports, in JBoss Server?

    Read the article

  • Rails setting OR conditions in validate_presence_of in a model?

    - by Jty.tan
    In a rails model, is it possible to do something like class Example < ActiveRecord::Base #associations validates_presence_of :item_id, (:user_id OR :user_email) #functions end Where the model has 3 columns of :item_id, :user_id, and :user_email? I want the model to be valid as long as I have a :user_id or a :user_email. Idea being that if the item is recommended to a person who isn't currently signed up, it can be associated via email address for when the recommended person signs up. Or is there a different method that I can use instead?

    Read the article

  • how to pass session variable to model in RoR?

    - by siulamvictor
    I used a global variable in my app for passing information before. But I got a problem and thanks everyone here suggested me to store those data in session with database. I tried, but I found that I can't access the session variable in Model. I googled and knew this is the Model normal behavior, RoR won't pass the session variable to Model. So how to pass the value of the session variable into Models? or is there any other method for my use case? I need a variable storing a value, which is required in all MVCs, and should be independent between different concurrent users. Thanks everyone. :)

    Read the article

  • Is it necessary to declare attribute [DataMember(Order=n)] on public method?

    - by veera
    In my solution, I have created public class to store value and already declare [DataContract/DataMember] attribute. For example, [DataContract] public class MeterSizeInfo { string _meterSizeId; [DataMember(Order = 1)] public string MeterSizeId { get { return this._meterSizeId; } set { this._meterSizeId = value; } } string _meterSizeName; [DataMember(Order = 2)] public string MeterSizeName { get { return this._meterSizeName; } set { this._meterSizeName = value; } } } Then I need to add another public method exposing to entire project. I wonder I have to add [DataMember(Order = 3)] for it or not. [DataMember(Order = 3)] //<--- must declare or not? public string DoSomething() { // do something... } I understand that if I want to use serializer in protobuf-net to serialize my data stored in, I have to declare those attribute. but I'm not sure about that on method. please help. Thank you in advance.

    Read the article

  • What are the requirements of a collection type when model binding?

    - by Richard Ev
    I have been reviewing model binding with collections, specifically going through this article http://weblogs.asp.net/nmarun/archive/2010/03/13/asp-net-mvc-2-model-binding-for-a-collection.aspx However, the model I would like to use in my code does not implement collections using generic lists. Instead it uses its own collection classes, which inherit from a custom generic collection base class, the declaration of which is public abstract class CollectionBase<T> : IEnumerable<T> The collections in my POSTed action method are all non-null, but contain no elements. Can anyone advise?

    Read the article

  • Fastest way to copy a set (100+) of related SQLAlchemy objects and change attribute on each one

    - by rebus
    I am developing an app that keeps track of items going in and out of factory. For example, lets say you have 3 kinds of plastic coming in, they are mixed in various ratios and then sent out as a new product. So to keep track of this I've created following database structure: This is very simplified overview of my SQLAlchemy models: IN <- RATIO <- OUT <- REPORT ITEMS -> REPORT IN are products coming in, RATIO is various information on measurements, and OUT is a final product. REPORT is basically a header model which has a lot of REPORT ITEMS attached to it, which in turn relate it to OUT products. This would all work perfectly, but IN and RATION values can change. These changes ultimately change the OUT product which would mean the REPORT values would change. So in order to change an attribute on IN object for example I should copy that object with that attribute changed. I would think this is basically a question about database normalization, because i didn't want to duplicate all the IN, RATIO and OUT information by writing it in REPORT ITEMS table for example, but I've came across this problem (well not really a problem but rather a feature I'd like for a user to have). When the attribute on IN object is changed I want related objects (RATIO and OUT) automatically copied and related to a new IN object. So I was thinking something like: Take an existing instance of model IN that needs to change (call it old_in) Create a new one out of it with some attributes changed (call it new_in) Collect all the RATIO objects that are related to old_in Copy each RATIO and relate them to a new_in Collect all the OUT objects that are related to old RATIO Copy each OUT and relate them to a new RATIO Few questions pop to mind when i look at this problem: Should i just duplicate the data, does all this copying even make sense? If it does, should i rather do it in plain SQL? If no what would be the best approach to do it with Python and SQLAlchemy? Any general answer would suffice really, at least a pointer in right direction. I really want to free then end user for hassle of having create new ratios and out products.

    Read the article

  • How to create a Mutex with security attribute to share resource from different application?

    - by Antony Tess
    How to create a Mutex with security attribute rigth to share resource from different application? In according with Microsoft SDK documentation the CreateMutex API accept as first parameter a SECURITY_ATTRIBUTES pointer. HANDLE WINAPI CreateMutex( __in LPSECURITY_ATTRIBUTES lpMutexAttributes, __in BOOL bInitialOwner, __in LPCTSTR lpName ); I want to create the rigth security attribute so only my application group can open the MUTEX and access to a specific resource (a file) where my application gruop read/write data operation. The target opertaing system are XP, Vista and Seven. The feature must working in both, administrator/standard user, login shenario.

    Read the article

  • Django admin panel doesn't work after modify default user model.

    - by damienix
    I was trying to extend user profile. I founded a few solutions, but the most recommended was to create new user class containing foreign key to original django.contrib.auth.models.User class. I did it with this so i have in models.py: class UserProfile(models.Model): user = models.ForeignKey(User, unique=True) website_url = models.URLField(verify_exists=False) and in my admin.py from django.contrib import admin from someapp.models import * from django.contrib.auth.admin import UserAdmin # Define an inline admin descriptor for UserProfile model class UserProfileInline(admin.TabularInline): model = UserProfile fk_name = 'user' max_num = 1 # Define a new UserAdmin class class MyUserAdmin(UserAdmin): inlines = [UserProfileInline, ] # Re-register UserAdmin admin.site.unregister(User) admin.site.register(User, MyUserAdmin) And now when I'm trying to create/edit user in admin panel i have an error: "Unknown column 'content_userprofile.id' in 'field list'" where content is my appname. I was trying to add line AUTH_PROFILE_MODULE = 'content.UserProfile' to my settings.py but with no effect. How to tell panel admin to know how to correctly display fields in user form?

    Read the article

  • "public" or "private" attribute in Python ? What is the best way ?

    - by SeyZ
    Hi ! In Python, I have the following example class : class Foo: self._attr = 0 @property def attr(self): return self._attr @attr.setter def attr(self, value): self._attr = value @attr.deleter def attr(self): del self._attr As you can see, I have a simple "private" attribute "_attr" and a property to access it. There is a lot of codes to declare a simple private attribute and I think that it's not respecting the "KISS" philosophy to declare all attributes like that. So, why not declare all my attributes as public attributes if I don't need a particular getter/setter/deleter ? My answer will be : Because the principle of encapsulation (OOP) says otherwise! What is the best way ? Thanks !

    Read the article

  • Comparing an array of users to an array of structs with user object as attribute, and returning matc

    - by keruilin
    I have an array of users who are friends. Let us call this array: friends I then have an array of structs. Each struct has a user object as an attribute (it also has a rank attribute). Here's what the struct class looks like, to add some context: class Leader < Struct.new(:rank, :user); end Let us call this array of structs: all_leaders_plus_rank I want to compare friends and all_leaders_plus_rank, and add the match from all_leaders_plus_rank to a new array of structs called friendly_leaders.

    Read the article

  • Which should I use for mouse over tooltip for image (alt, longdesc, title)

    - by Virtual Jasper
    Currently, my webpage images use the alt attribute only. Users complain that their IE8 cannot show the "tooltip" bubble when they mouse over the image. On Microsoft's What's New in Internet Explorer 8 page, it says The alt attribute is no longer displayed as the image tooltip when the browser is running in IE8 Standards mode. Instead, the target of the longDesc attribute is used as the tooltip if present; otherwise, the title is displayed. The alt attribute is still used as the Microsoft Active Accessibility name, and the title attribute is used as the fallback name only if alt is not present. I also found that many say title should be used. Which should I use to meet the industrial standard: alt, longdesc or title?

    Read the article

  • Omit attribute name from validation error message (at start of it)?

    - by mrbrdo
    I write code in English but I'm currently doing a site which is fully translated to another language (validation error messages included). However, I have a problem because validation error messages always seem to include the name of the attribute the error is on at the start of the error, e.g.: Title Prosimo izpolnite naziv fakultete. I want to get rid of the Title at the start, like so: Prosimo izpolnite naziv fakultete. Any help is appreciated. I would rather see if this can be solved without installing any 3rd party plugins. If it's possible to provide translations for attribute names, that would be a cool solution too, but I would still like to know how it can be done both ways (omit or translate).

    Read the article

  • Getting ClassCastException with JSF 1.2 Custom Component and BEA 10.3

    - by Tobi
    Im getting a ClassCastException if i use Attributes in my Custom Headline Tag. Without Attributes rendering works fine. Calling <t:headline value="test" /> gives a ClassCastException even before a Method in my HeadlineComponent or HeadlineTag-Class is called. <t:headline /> works fine. I'm using MyFaces-1.2, on BEA 10.3 default.jsp <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <%@ taglib prefix="t" uri="http://www.tobi.de/taglibrary" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Tobi Test</title> </head> <body> <f:view> <t:headline value="test" /> </f:view> </body> </html> HeadlineComponent.java package tobi.web.component.headline; import java.io.IOException; import javax.el.ValueExpression; import javax.faces.component.UIOutput; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; public class HeadlineComponent extends UIOutput { private String value; private Integer size; @Override public Object saveState(FacesContext context) { Object values[] = new Object[3]; values[0] = super.saveState(context); values[1] = value; values[2] = size; return ((Object)(values)); } @Override public void restoreState(FacesContext context, Object state) { Object values[] = (Object[])state; super.restoreState(context, values[0]); value = (String)values[1]; size = (Integer)values[2]; } @Override public void encodeBegin(FacesContext context) throws IOException { // Wenn keine Groesse angegeben wurde default 3 String htmlTag = (size == null) ? "h3" : "h"+getSize().toString(); ResponseWriter writer = context.getResponseWriter(); writer.startElement(htmlTag, this); if(value == null) { writer.write(""); } else { writer.write(value); } writer.endElement(htmlTag); writer.flush(); } public String getValue() { if(value != null) { return value; } ValueExpression ve = getValueExpression("value"); if(ve != null) { return (String)ve.getValue(getFacesContext().getELContext()); } return null; } public void setValue(String value) { this.value = value; } public Integer getSize() { if(size != null) { return size; } ValueExpression ve = getValueExpression("size"); if(ve != null) { return (Integer)ve.getValue(getFacesContext().getELContext()); } return null; } public void setSize(Integer size) { if(size>6) size = 6; if(size<1) size = 1; this.size = size; } } HeadlineTag.java package tobi.web.component.headline; import javax.el.ValueExpression; import javax.faces.component.UIComponent; import javax.faces.webapp.UIComponentELTag; public class HeadlineTag extends UIComponentELTag { private ValueExpression value; private ValueExpression size; @Override public String getComponentType() { return "tobi.headline"; } @Override public String getRendererType() { // null, da wir hier keinen eigenen Render benutzen return null; } protected void setProperties(UIComponent component) { super.setProperties(component); HeadlineComponent headline = (HeadlineComponent)component; if(value != null) { if(value.isLiteralText()) { headline.getAttributes().put("value", value.getExpressionString()); } else { headline.setValueExpression("value", value); } } if(size != null) { if(size.isLiteralText()) { headline.getAttributes().put("size", size.getExpressionString()); } else { headline.setValueExpression("size", size); } } } @Override public void release() { super.release(); this.value = null; this.size = null; } public ValueExpression getValue() { return value; } public void setValue(ValueExpression value) { this.value = value; } public ValueExpression getSize() { return size; } public void setSize(ValueExpression size) { this.size = size; } } taglibrary.tld <?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <description>Tobi Webclient Taglibrary</description> <tlib-version>1.0</tlib-version> <short-name>tobi-taglibrary</short-name> <uri>http://www.tobi.de/taglibrary</uri> <tag> <description>Eine Überschrift im HTML-Stil</description> <name>headline</name> <tag-class>tobi.web.component.headline.HeadlineTag</tag-class> <body-content>empty</body-content> <attribute> <description>Der Text der Überschrift</description> <name>value</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <description>Die Größe der Überschrift nach HTML (h1 - h6)</description> <name>size</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib> faces-config.xml <?xml version="1.0" encoding="UTF-8"?> <faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd" version="1.2"> <component> <description>Erzeugt eine Überschrift nach HTML-Stil</description> <display-name>headline</display-name> <component-type>tobi.headline</component-type> <component-class>tobi.web.component.headline.HeadlineComponent</component-class> <attribute> <attribute-name>value</attribute-name> <attribute-class>java.lang.String</attribute-class> </attribute> <attribute> <attribute-name>size</attribute-name> <attribute-class>java.lang.Integer</attribute-class> <default-value>3</default-value> </attribute> </component> </faces-config>

    Read the article

  • ASP.NET MVC 2 "value" in DataAnnotation attribute passed is null, when incorrect date is submitted.

    - by goldenelf2
    Hello to all! This is my first question here on stack overflow. i need help on a problem i encountered during an ASP.NET MVC2 project i am currently working on. I should note that I'm relatively new to MVC design, so pls bear my ignorance. Here goes : I have a regular form on which various details about a person are shown. One of them is "Date of Birth". My view is like this <div class="form-items"> <%: Html.Label("DateOfBirth", "Date of Birth:") %> <%: Html.EditorFor(m => m.DateOfBirth) %> <%: Html.ValidationMessageFor(m => m.DateOfBirth) %> </div> I'm using an editor template i found, to show only the date correctly : <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime?>"%> <%= Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty))%> I used LinqToSql designer to create my model from an sql database. In order to do some validation i made a partial class Person to extend the one created by the designer (under the same namespace) : [MetadataType(typeof(IPerson))] public partial class Person : IPerson { //To create buddy class } public interface IPerson { [Required(ErrorMessage="Please enter a name")] string Name { get; set; } [Required(ErrorMessage="Please enter a surname")] string Surname { get; set; } [Birthday] DateTime? DateOfBirth { get; set; } [Email(ErrorMessage="Please enter a valid email")] string Email { get; set; } } I want to make sure that a correct date is entered. So i created a custom DataAnnotation attribute in order to validate the date : public class BirthdayAttribute : ValidationAttribute { private const string _errorMessage = "Please enter a valid date"; public BirthdayAttribute() : base(_errorMessage) { } public override bool IsValid(object value) { if (value == null) { return true; } DateTime temp; bool result = DateTime.TryParse(value.ToString(), out temp); return result; } } Well, my problem is this. Once i enter an incorrect date in the DateOfBirth field then no custom message is displayed even if use the attribute like [Birthday(ErrorMessage=".....")]. The message displayed is the one returned from the db ie "The value '32/4/1967' is not valid for DateOfBirth.". I tried to enter some break points around the code, and found out that the "value" in attribute is always null when the date is incorrect, but always gets a value if the date is in correct format. The same ( value == null) is passed also in the code generated by the designer. This thing is driving me nuts. Please can anyone help me deal with this? Also if someone can tell me where exactly is the point of entry from the view to the database. Is it related to the model binder? because i wanted to check exactly what value is passed once i press the "submit" button. Thank you.

    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 | 117 118 119 120 121 122 123 124 125 126 127 128  | Next Page >