Dynamically Add Items To A Collection In MVC2 Using EditorFor()?
Jul 12, 2010
I'm trying to do this: Editing a variable length list, ASP.NET MVC 2-style
In the post he mentions that it could be done with less code using Html.EditorFor(), but that it would be more difficult because of the indexes. Well, that's exactly what I want to do, and I don't know where to begin.
Update 1: Instead of generating a GUID for each item in the collection, I'd like to generate incremental indexes starting with 0. Right now the field names look like "gifts[GUID].value"; I would like them to be "gifts[0].value","gifts1.value" etc. but I don't understand how the collection keeps track and generates these indices.
I've been trying to something with the templating system in MVC2, but what I thought should be simple has not been successful. So now I question if it's possible or if I'm missing anything obvious. The scenario:
I have a base template as a strongly typed view that is set up in the ViewsSharedEditorTemplates folder...call it CommonItem.ascx. It wants a model item of type MyItemType.
I have a template that is a wrapper around the previous template, is also strongly typed of type MyItemType, residing in the same folder. Call this one CommonItemWrapper.ascx.The contents of CommonItemWrapper.ascx includes divs before/after a declaration Html.EditorForModel("CommonItem").
My expectation would be that the inner template (CommonItem) would be displayed within the outer template. Unfortunately the inner template never gets evaluated.
Am I missing something? Am I mistaken in thinking that templates can be nested in this manner? If so, is there another means to accomplish this?
but what if I wanted to bind to collection items within the ViewModel. I'm not sure if it's possible. Here's what I have:
My ViewModel:
[code]....
I'm getting the following error: Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.
I have a collection of items in a model that I am looping through to display a very simple editable grid like this
[Code]....
but the values typed in in the textboxes do not appear to be anywhere in the model post data , does anyone have any pointers , this mustbe a common scenario and just cant find solution.
and print the indexes in an HTML list, here's the results that I get...
Using blockRetrievedList.BinarySearch('Larry'); : 1 Using blockRetrievedList.BinarySearch('Mike'); : -5 Using blockRetrievedList.BinarySearch('Sue'); : -5 Using blockRetrievedList.BinarySearch('Bob'); : -1 Using blockRetrievedList.BinarySearch('John Barrowman'); : -1
So while Larry comes out fine at index one, John Barrowman and Bob should be indexes 2 & 3 respectively. However, they're coming up -1 meaning they're not recognized as being the collection. Further Mike (who was originally in the set, but who has now been replaced by John Barrowman is coming up -5. Isn't that supposed to be -1? And why on Earth is Sue (who is index 0, returning -5 as well?
I got 2 listboxes in a window form, one on left and one on right. The 1st listbox have some items while the 2nd listbox is empty. Also there are 2 buttons between the 2 listboxes which used to move item from/to the 1st and 2nd listbox.My problem here is that after I bind the data to the 1st listbox (from a dataTable, using DisplayMember and ValueMember) , and I try to move 1 of the item from this 1st listbox to the 2nd listbox and I want that the selected item is also removed from the 1st listbox by:
But the selected item is not removed from the 1st listbox.Also on deselect button when i move item from 2nd listbox to 1st listbox,it displays error message "Items collection cannot be modified when the DataSource property is set."
I have an ASCX control which is a special dropdownlist. I add that control dynamically to the page and fill it with data. This control has a postback that will change the contents of a second dynamically created standard dropdownlist.
When I change the selection on the first dropdown, the indexchanged fires and I get new data and attempt to place it in the second dropdownlist's items collection, by first clearing it then filling it with new data.
This works fine the first time a change the selection, but when I select a second time the following error is thrown:
The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request.
I'm not adding or removing new controls in the fired event, only changing data. And again, it works the first time, but doesn't subsequent times.
If I disable stateview on the child control, then the control just doesn't get updated with data at all.
i have a lable a textbox, and two buttons(+ and - button) on my asp.net page.
so when i click on the plus button it should add the the whole collection of controls to the page(i.e. lable, textbox and two buttons). And when i click on minus button it should remove the collection.
This should go on.meaning whenever i click on any plus button the control collection should get added to the page.
I am wondering what will be the best approach to do it.
foreach (DataGridViewRow item in dataGridView1.Rows) { if (Convert.ToBoolean( item.Cells[0].Value) == true) { foreach (DataGridViewColumn col in dataGridView1.Columns) { **class oclass=new class(); oclass.property = item.Cells[col.Name].Value.ToString(); Collection.add(oclass);** } } }
In the above syntax,i want to fill class property dynamically.I also add my class in collection.Is it possible in C#,fill class property dynamically?My grid contain more than one column.My grid's column name are same as class property name.I want to do the bellow thing:
foreach (DataGridViewColumn col in dataGridView1.Columns) { **class oclass=new class(); oclass.col.Name= item.Cells[col.Name].Value.ToString(); Collection.add(oclass);** }
This has got to be more simple than I'm making it. I want to generate a listbox with years for the values. It needs to be dynamic. It needs to list from 17 years ago to 25 years ago. This is what I have so far, I get the correct number of items in the listbox, but I don't get the correct value. They are all "1985".
<% Dim y As Integer Dim NextTime As Date = Now Dim bday_yr As New ListItem() y = 0 For y = 17 To 25 NextTime = DateAdd(DateInterval.Year, -y, System.DateTime.Now) bday_yr.Value = NextTime.Year bday_yr.Text = NextTime.Year BirthYear.Items.Add(bday_yr) Next %> <asp:DropDownList ID="BirthYear" runat="server"> </asp:DropDownList>
I have a list of objects that I want to bind to a gridview. Creating that list and binding it works fine for most of the public properties in that list.
There are some objects contained in each of those objects... for instance there is an Address object.
object.Address.Line1;
object.Address.Line2;
When I bind this to my gridview, I have no issues with stuff like object.DateRegistered, but how can I access things like object.Address.WhatEverProperty? I always get this error:
"A field or property with the name 'xxx.xxxx' was not found on the selected data source."
On adding items in it ,shows an error: "Dropdownlist does not allow multiple selection."But when i tries to print the selected item it shows null exception.
I am using Asp.Net 3.5 along with C# and database is SQL Server 05. I am using Asp.net menustrip that is bind with with data source using LINQ to SQL. i also add some CSS stuff with menu so that after applying CSS my menu show at top of website horizontally.
But i need some JQuery Menu (stylish menu) which should be populate dynamically.
For Example i created two roles 1) Admin 2) User
When admin loggin the admin menu show when user loggin admin menu hide and all the data of menu is populate via JSON file. I am using sitemap to populate menu but now i want some JQuery Menu which is stylish and should populate accodrding to needs not be hard coded.
i have a list of complex object letīs say: List<House>, inside of a model that i pass to the view.
To render that list i use the Html.EditorFor(x => x.list[i], "PartialView") inside of a div (<div id="editor"></div>). To "add" an item i use an ajax method that return a new partial view of the same type, an append it to the the div.
This way, the new partial it's appended but when i do the post, only the first item (list[0], the one that i pass in the controller to start) itīs bounded, but, the items added via ajax arenīt.
What could i do in this case? i wan't mi list to grow every time i hit the link that calls the ajax method and then take every item and add them to my database. i've followed this tutorials:
I am developing an mvc 2 application.In my form i have a listbox. Based on selecting the items in the listbox a vertical tab is created.the tabs in the vertical tabs are created corresponding to each item selected in the listbox.after the creation of the vetical tabs each vertical tab will be containing a listbox.here the user can select the list items.now my problem is that i want to know which all items in each listbox in each tab is been selected .some code:
It's being loaded from a dynamically generated XmlDataSource Item:
[Code]....
The XML of which looks something like this:
[Code]....
I can't seem to figure out a way to make the width of the drop menus consistent (they're following the padding conventions I have outlined, I get that). What I'm interested in is a way to make the DynamicItemsStyle width on all items the width of the widest one.
I've been at this same question in different forms now for a while (see e.g. Entity Framework and MVC 3: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. ), and it's still bugging me, so I thought I'd put it a little more generically:
You have an entity object (using Entity Framework), say User. The User has some simple properties such as FirstName, LastName, etc. But it also has some object property lists, take the proverbial example Emails, to make this simple. Email is often designed as a list of objects so that you can add to that object properties like Address and Type (Home, Work, etc). I'm using this as an example to keep it generic, but it could be anything, the point is, you want the user to be able to add an arbitrary number of these items. You should also be able to delete items (old address, or whatever).
Now, in a normal web page you would expect to be able to add these items in the same View. But MVC as it seems designed only makes it easy to do this if you call up an entirely new View just to add the address. (In the template for an Index View you get the "Create New" link e.g.).
I've come across a couple of examples that do something close to what I mean here:
[URL]
and
[URL]
The problem is, although the sample projects on these sites work fine, with mock model objects, and simply lists (not an object with a child list), it's a different thing if you actually want to do something with the posted information - in my case save to database through the Entity Framework model. To adapt these cases to that, all of a sudden I'm in a maze of intricate and definitely not DRY code... Juggling objects with AutoMapper and whatnot, and the Entity Framework won't let you save and so on (see above link if you're interested in the details).
What I want to get at is, is it really possible that this is such an uncommon thing to want to do? Update a child collection in the same View as the parent object (such as the email addresses in this case)? It seems to me it can't be uncommon at all, and there must be a standard way of handling this sort of scenario, and I'm just missing it (and no one here so far has been able to point me to a straighforward solution, perhaps because I made it too abstract with my own application examples).