My view is the same as any standard auto-created view, with properties set using the likes of:
[Code]....
In my edit page, for editing the fields for these classes, everything works fine, the model binder works, and validation works. In my create page, only the Project class properties get set and the ProjectCustomer properties remain null. I've tried everything I can think of from manually instantiating a new ProjectCustomer before calling TryUpdate model, to letting MVC handle the lot by including the class as a paramater for the action. The values are being passed just fine, as I've tried a FormCollection too and in the debugger the FormCollection contains all the correct fields (i.e. Customer.Name etc.) yet no matter what the ModelBinder just wont attach the inputs to the Customer object inside the Project object, but will only not do this on the Create action, and does it fine for the Edit action even though the code is almost entirely identical.
why the ModelBinder is just refusing to bind for the Create action and no other? What steps can I perform to debug the ModelBinder when it's not working properly like this?
I've tried every combination of things I can think of under the sun, and simply can't understand why it works for one action, but not for another, especially when the code I've used is fairly basic. I'll note that these classes were intended as MetaData classes hence their pointless seeming simplicity, but as part of trying to track down the problem I've stripped them to the bare bones setup above, and still no luck.
Under what circumstances does the ModelBinder decide not to fill the properties of a sub-object?
We know that authorization's stuff is a cross cutting concern, and we do anything we could to avoid merge business logic in our views. But I still not find an elegant way to filter UI components (e.g. widgets, form elements, tables, etc) using the current user roles without contaminate the view with business logic. same applies for model binding.
Example Form: Product Creation Fields: Name Price Discount Roles: Role Administrator
Is allowed to see and modify the Name field Is allowed to see and modify the Price field Is allowed to see and modify the Discount
Role Administrator assistant
Is allowed to see and modify the Name Is allowed to see and modify the Price
Fields shown in each role are different, also model binding needs to ignore the discount field for 'Administrator assistant' role.
This project is pretty far away and I'm not in the position to go make changes all over the place (If I could, deleting the lot would be what I'd do!)
I want to create a modelbinder that would resolve any dependencies my View Models might have (using StructureMap).
It should not require me to implement a specific interface (so many developers, so many interfaces..I rather keep things clean) and hopefully not require one to go register each model binder individually (Now I'm asking too much,taking the first requirment in consideration).
Probably will get it right tonight, but figured I'd ask.
I'm starting with EditorTemplates and I have this situation: I have and fild int that represents and phone number. In EditorTemplate I'll separate it in 2 textbox. But How can I join (concatenate) it in my action? If possible, I want to still use ModelBinder.
just for an asp:TextBox element. What I want is that on submit to have the new values inside the binded object and I don't want to manually read and set the values.
I'm having trouble finding a good tutorial on binding complex lists to an object. Essentially we have currencies that are user defined, we need to generate a form for each currency to allow the user to input exchange rates. I think I'm doing my list properly according to this post, however I'm not getting any data bound. here is my ASPX snippit.
[Code].... Here is my form data object and associated objects.
[Code]....
Here is the html that is rendered.[Code]....
I'm having trouble finding a good tutorial on binding complex lists to an object. Essentially we have currencies that are user defined, we need to generate a form for each currency to allow the user to input exchange rates. I think I'm doing my list properly according to this post, however I'm not getting any data bound. here is my ASPX snippit.
Is it possible to bind a rdlc report to a business object (.NET 4/VS 2010)In my report I have TextBoxes called Name and Email.Say I have an object Person with properties Name and Email.Can I bind the .rdlc with an object Person at runtime?
I need to show this array in a treeview in this way: When the person has ID finished in 00, it is showed how the father node, and the other persons starting with the same letter are the child nodes.
In this case Andy would be the father indented 0, and john and lina would be his childs indented 1.
I need to show this structure in a checkbox treeview and when I select the father checkbox, the child checkbox must be selected too.
I used bind all GridViews, DetailViews etc. on my page using an ObjectDataSource (unless it wasn't possible to do so). Recently, I've started binding all my contols programatically. I find this a lot cleaner and easier, though some may disagree. Binding with a ObjectDataSource obviously has it advantages and disadvantages, as does doing it programatically.Say I bind a GridView programatically (e.g. GridView1.DataSource = SomeList), when I change page on the GridView, I have to also code this. Each time the page changes I have to call GridView1.DataSource = SomeList again. Obviously with a ObjectDataSource I don't need to do this. I normally stick my SomeList object into the ViewState so when I change page I don't need to hit the database each and every time.
My question is: Is this how the ObjectDataSource works? Does it store it's data in the ViewState and not hit the database again unless you call the .Select method? I like to try and get the best performance out of my applications and hit the database as few times as possible but I don't really like the idea of storing a huge list in the ViewState. Is there a better way of doing this? Is caching per user a good idea (or possible)? Shall I just hit the database everytime instead of storing my huge list in the ViewState? Is it sometimes better to hit the database than to use ViewState?
i have one ajax accordion control and inside that i have a list view inside that control. now listview is bind to objectdatasourcecontrol.
and object data soruce control is bind to a custom class. Now the problem is that i need to naviagate to different pages on the click of the listview items or load user control...Now how to do that?. i am pasting my code here.
[Code]....
and class file which is bind to objectdatasource control
Quick question here. I'm sure it's possilbe, just can't get it to work.
I've got a gridview. In have a gridview. The gridview is bound to a list of my custom class. The class exposes a link to an image as well as the image's height and width. I have a Image Control in the gridview. I've bound the Image Url to the correct property. Now, I'd like to bind the height and width properties as well. But everytime I do that I get the following error:
Cannot create an object of type 'System.Web.UI.WebControls.Unit' from its string representation '"<%#Bind("GetImageHeight()")%' for the 'Height' property.
I have a List of complex objects containing other objects within that I give as the data source to a gridview.(currently I'm using BoundFields for the columns). I need to bind data to the columns from the objects within at run time. How can this be done?
I am using ASP.Net MVC2 and LINQ to SQL. I am using DataAnnotations and model binding in conjunction with a Form/View and its working beautifully well. Loving that.. My view is an "Add new Employee" form that's adding a new "Employee" complex object. Every Employee also has a child complex object called an "Address". I am using the bound Html helpers in the view, such as Html.TextBoxFor(model => model.NewEmployee.FirstName) for example. Working beautifully well, validating beautifully well both client and server and coming into the controller fully populated and ready to be saved! Exciting.. ModelState.IsValid returns true and I go to save the new Employee.
The Employee is created fine but the system also creates a blank/new Address record in my Addresses table even when the Address fields are blank! How can I prevent any Address from being created, in situations where I ONLY want to create a new Employee with no Address. An example is when the user supplies an existing Address, then I wish to simply set the new Employee's AddressID to that of an existing physical address (I hope that makes sense). But it could apply to any situation where you need to create a new complex object, but you don't wish for LINQ to create any of its child complex objects. I have tried setting NewEmployee.Address = null after it is received in the controller, but even after that, a blank/new Address is still created. Even if I try NewEmployee.Address = SomeExistingAddress, it does correctly link the Employee to the existing Address, but it STILL goes off and creates another redundant new/blank address record! Which is really weird..
I have a "Create New Employee" ASP.Net MVC form. My complex object is an Employee and an Employee has an Address, which is another Complex object. On my View/Form I collect all required values for both the Employee and the Address. I'm using the bound HTML helpers such as: Html.TextBoxFor(model => model.EmployeeAddress.StreetName)
This is all working beautifully well. Model binding is working like a dream, both server side and client side validation using DataAnnotations is working beautifully well and I am nicely receiving my populated complex objects as expected in the Controller.. Now I'm trying to save.. The Employee should always be newly created, because its an "Add New Employee" form. But sometimes the Address is an existing Address and I don't want to insert another one. Rather, I just want to link the Employee to the existing AddressID of the one that already exists in the database.
So I wrote a nifty GetExistingOrCreateNewAddress(Address PostedAddress) method which works great so I end up with the correct Address to use and link to the about to be saved Employee object. This is all happening in the same DataContext, so no problems there..
BUT even when I link the about to be saved Employee object to an existing Address, on save a new/empty Address row is created in my Addresses table. Even though the newly created Employee does link correctly to the existing Address I told it to! Why is it so??? And how can I save the new Employee without LINQ automatically creating a blank Address for me. Because I'm explicitly specifying an existing Address it should be linked to instead!
[HttpPost] public ActionResult CreateEmployee(EmployeeDetailsViewModel NewEmployeeDetails) { if (ModelState.IsValid) { EmployeeRepository ER = new EmployeeeRepository(); // Fetch or Create the appropriate Address object for what has been entered Address ActualAddress = ER.GetExistingOrCreateNewAddress(NewEmployeeDetails.EnteredAddress); // Link this Address to the "about to be saved" Employee NewEmployeeDetails.Employee.Address = ActualAddress; // Lock it in.. ER.SaveNewEmployee(NewEmployeeDetails.Employee);
Okay, here's something that I could easily do the hard way and manually wire up each form element and save it to a datatable in memory, but there has to be a more efficient way to do it.
Here's what I have:
1. A strongly typed datatable and tableadapter in a XSD name Orders
2. A formview control which currently is connected to an ODS connected to the Orders tableadapter, this makes it easy to wire up the databindings for each form field in design view
I would like to:
- bind the the formview to an instance of the strongly typed datatable, and then save the dt to a session object without interacting with the actual database
- load forms on subsequent pages from the dt in session
- ultimately save the dt info to an actual database table on the third page
I've read some solutions where a custom class is created, but to me this seems like almost as much work as wiring up the form field to the table columns manually in code.
I have a DetailsView (DV) control, an ObjectDataSource (ODS) control, and a button on a page. I have 2 classes in the App_Code directory (Customer and CustomerDAO). The DAO class provides static methods for the ODS control and simply hack values in (ie...no real database selects/updates). The Customer class has 2 properties (Id and Name) and a default constructor. The page takes an ID on the querystring and determines if the DV control is in insert or edit mode. If in edit mode, it sets the SelectParameter on the ODS (id field), calls ODS.Select(), and then calls DV.DataBind(). The existing (although fake) customer is loaded and display properly when this happens. I then change the name of the Customer in the DV and click the Button to save the new data.
Everything seems to be wired up correctly as the UpdateMethod that is specified in the ODS control is called and succeeds (even in my real example with my database). The problem is that the BoundFields in the DV control have not been updated with the new values and therefore the existing values are updated in the database and my changes are lost. I have handled the OnUpdating event of the ODS and the values are still the old values. I have also handled the OnItemUpdating event of the DV control and the NewValues IOrderedDictionary still has the old values in it also. In looking at the MSDN article for the UpdateMethod, it states the following:
Parameter Merging Parameters are added to the UpdateParameters collection from three sources:
From the data-bound control, at run time. From the UpdateParameters element, declaratively. From the Updating event handler, programmatically.
I am using the BoundField classes in my DV control so I would have assumed that the first bullet above would have handled the updating of values, but it doesn't appear to work with the way I am doing it. If I set the values explicitly in the OnUpdating event that is fired by the ODS control (the 3rd bullet) the right values are updated (again...even in my real database situation). It seems like my only issue is that the automatic binding that I expect from the DV control isn't working as I would expect it to. Here is the code that I have in my fake example:
My Grid is bound to a collection type datasource. When I try to sort the Columns in the Grid I get Javascript error saying sorting event not implemented. Why is the default inbuilt sort functionality not working which worked fine when I directly used a sqlDataSource using smart tag. Do I have to write some code to achieve sorting ?
Given the above scenario, I would have thought that submitting the form with a blank ProductId would have been fine because I didn't decorate the ProductId property with [Required]. However I get the error message "The ProductId field is required".
Is there any way to make an Integer property on the model not required?
A have a custom object - Person in my cs-file and I want to Bind the property Firstname from Person to my textbox txtFirstname in my aspx-file but I cant seem to make it work.
I usually work with webcontrols so its very rare that I get out of my cs-file and use the aspx-file. I can solve my problem by letting my cs-file update the Text-property on my TextBox - but I dont want that I have declared my Person object as protected in my cs-file like this
protected Person myPerson = new Person { Firstname = "Testname" }; and my aspx-file looks like this
I get nothing in my textbox and I want to use this method to update the text-property for a change - you know just to learn some new and not getting stocked in the cs-file all the time.
What's the difference between binding for example a column called ("Name") in both cases ? and is there's any performance difference ?1- Assigning the data in the mark-up
2- defining a control object for every control inside the repeater ItemTemplate and find it and then assign the data in the column "Name" to ite.Item.FindControl("Name_Lbl")