MVC :: Models In UserControls / Load A Usercontrol With Its Own Model
Mar 17, 2011
I am trying to load a usercontrol with its own model, how does this work in practice? What I want really is to click on a button in a View which opens up a UserControl in the center of the page but there will be no sending my model to it because the model used on the page does not contain what I want it to display in the control (More detailed, the page is a memberpage and the uc is an admin page for approving images sent by other members). I've messed around with Inheritance but not really gotten any good results from that perhaps im doing it wrong). This is how it looks today:
The Model
[Code]....
The Controller
[Code]....
The Link
[Code]....
The UserControl
[Code]....
The Error
What can I do differently to make this thing work properly?
I've a product model that contains a list of description models. Every description model contains some string values because every product can have a description for every language. Here it is a semplified version of my models:
[Code]....
So my view to insert a new product is like this:
[Code]....
And my PartialProductDescription view is like this:
[Code]....
Now, the views are perfect. With some Jquery UI I have a form with all the product properties and a tab panel with the language descriptions.
Unfortunatelly my POST action with the firm public ActionResult ProductNew(ProductModel model) has all the model property InternationalDescriptions that contain 2 empty models. So if I write something in the form in the first description textarea, model.InternationalDescrtiptions[0].Description is always empty.
So, how I can tell to MVC to take description textarea values and put them in the model?
... so that I can access some property of the model inside my Control. Unfortunately this method doesn't work, as I get a message saying "This is not scriptlet. Will be output as plain text".
Is what I'm trying to do even possible? If so, how I can try and do it?
If it's relevant, this is a .Net 4 project, with MVC 2 components.
I'm working on an ASP.NET MVC 2 project with some business entities that have metadata dataannotations attributes applied to them (Validation attributes, Display attributes, etc.).
Something like:
[Code]....
Using the metadata from different views is no problem, as long as I am using my business entities as viewmodels or as part of a viewmodel like this:
[Code]....
However, sometimes I need to code a view for editing some, but not all fields of an entity. For those fields I want to reuse the metadata already specified in my user entity. The other fields should be ignored. I'm talking about custom view models like this:
[Code]....
That's where I am running into problems. The custom view model above leads to an exception when the view is generated, because it has no password property.
The associated metadata type for type 'Zeiterfassung.Models.ViewModels.Users.UserNameViewModel+UserModel' contains the following unknown properties or fields: Password. make sure that the names of these members match the names of the properties on the main type.
Also, even if this exception did not occur, I expect to get into even more trouble with model validation on form submit because Password is marked as required in my business entity.
I can think of several workarounds, but none seem really ideal. In any case I can't change the database layout so that the password field would be in a separate entity in my example above.
I have a parent View that uses a few partial views. Each partial view has its own custom model. The parent View is a model containing each of the partial view's model. In other words this parent View model is NOT flat.
How do i get POST data to bind with the parent's model object? Do i have to write a custom model binder?
Update I'm not binding to a collection of objects of the same type (ie: a collection of uploaded files). I'm binding to object that contains multiple of objects. For example:
Part of a web application we have uses an in-house web control assembly. This assembly contains several web user controls where several of these are used by other web controls within the same assembly.
The assembly is built as a website with a web deployment project.
The main web application's pages are dynamically compiled through a service into a single assembly and placed into the appropriate bin folder. In our development server the old assemblies aren't always tidied up and removed, meaning the folder gets full of old assemblies.
When the page that uses the in-house web control assembly (mentioned above) runs, the asp.net instance throws an out of memory as it loads all the old assemblies in an attempt to determine which assembly houses the reference to the user control being used by the other user control inside the same assembly.
We've been using the following inside the top level user controls to register the other controls
Of course when the application runs this gives no information as to which assembly it can find it in.
Is there anyone that's come across this problem before? It's not really a problem as our live servers use a clean up tool to remove old assemblies, but there are still potential situations where we could get out of memory caused by this (for example the tool stops working!), so it would be nice to resolve this problem.
I am hoping someone can help me out. I have a web application that contains a usercontrol think "employment details" a user can enter a previous employment detail.
I have created a page that contains an update panel a placeholder and a button. The button I want to use to load a new copy of the same usercontrol. Can anyone point me in the right redirect?
I have built a "portal" that displays "widgets" (server side usercontrols). The page contains two columns, each containing an updatepanel. Each widget contains an updatepanel and multiview with the default view showing a "loading" message and the second view contains the actual content.
When a user logs in, I query the database to get a list of widgets the user has access to, along with their column and order number. During page init, I add all of the widgets to the page's columns in the order indicated. Once the page loads, a timer on each widget gets fired and the widget's multiview switches from the "loading" view to the content view and sets the content's visibility to true. This forces the content to load.
Setting up the load this way makes the page load appear faster because it doesn't process any of the widget data until after the initial page load. This all works fine but I have an issue with the order in which the widgets get loaded.
Currently, the page loads and the widgets will start loading from the top of the left column down to the bottom, then it will start loading the top of the right column. The page could potentially have many widgets so I end up staring at a bunch of loading messages on the right side while I wait for the full left column to load. I would really like to be able to load top down across both columns instead of the whole left column and then the right column. For example, load the first widget in the left column, then the first in the right, and so on. This way, the user would have something to look at the top instead of staring at a bunch of loading messages and having to scroll down the page while it loads.
I got 15 tabs and 15 user controls assigned to each tab.All are loading at once which id delaying the process. I want to load one user control on selection of a tab in tab container.
Here the UserControl is correctyle loaded via http. So what should i do to load it from the same position but via the https protocol (the certificate is already configured)?
I like to build a components collection project so that I can use those components later on other projects. For example I created a UserControl called MyDataGrid.ascx
So suppose the projects layout are something like this:
--> IPGostarProject - Under namespace of IPGostar - contains components and lot's of user controls --> SampleProject - here I want to use MyDataGrid.ascx UserControl from IPGostar namespace.
But as you know LoadControl function only takes virtual directory as it's parameter. So you can't load anything outside the SampleProject directory!
i have a beginners question. I would like to build a website with n areas with usercontrols inside for different actions. For example one usercontrol should show up last n logged in users, or another usercontrol should do a long running operation and should show some calculated information on sales information etc.
Building these controls and the page for this is no problem without AJAX, but how could i make it, that the n single usercontrols load AFTER the base page is loaded with an progress bar like "Loading data. Please wait." and when its finished it should show the information.
How could i make that? I think that this is possible, cause i saw it on several websites.
My first testing was to put two or more updatepanels and in each update one usercontrols. But that didnt work.
in my aspx page i have some controls loadded dynamic and other one loaded static, when i am loading the user control dynamically,the dynamic usercontrols loaded successfully, but all static control inside page will be removed! i load the user control using the bellow code inside PlaceHolder. this is my code in aspx page:
I have UserControl that has asp control(<asp:Button runat="server" ID="btn" />) and I want to render it. I tried 1
[Code]....
It doesn't works because it says that each control that has runat="server" must be in Form.I also tried 2:Because loader.Form is null, I create HtmlForm and added the ctrl to it and then added HtmlForm to loader's Control, BUT it says that it has 2 HtmlForm. So, instead I "injected" HtmlForm to loader like this [Code]....
Now no error is occurred, BUT StringWriter is empty. don't tell me to add Page to solution and override OnRender. I want to do it as I mentioned above.
When it comes to the usercontrol specially when they are loaded dynamically on the basis of certain conditions then it becomes a very confusing work. I have read in many forums that the dynamic controls have to be loaded in OnpreInit or OnInit. Some of those links are[URL] But this is useful only when if the we know that we have to load UserControl1, UserControl2 without considering any conditions. But what if I have a Tab control and for each Tab Click I have to load the UserControl dynamically. In that situation how can we add the control in either OnPreInit or OnInit. If I am not mistaken then in such case, then we can add usercontrol in certain events. If we are using a TabControl then we load in Tab_Click , if we are using Menu Control then we use Menu_Click and depending upon the particular tab or Menu we load associated usercontrols. Hence in these conditions, how can we go with the logic mentioned by above links. I have this confusion for very long time . I am posting little portion of my project here. I am using RadTabControl but it doesnt matter if it is Microsoft TabControl. In the aspx, I have a code to define RadTabControl.
In the code behind, I am loading usercontrol on the basis of the particular TabClick. tabMeberDetails_Click fires whenever I click on the tabs.ViewState["ControlName"] stores UserControlName on the basis of certain condition and finally i load the usercontrol.
proteced void tabMemberDetails_Click(object sender, RadTabStripEventArgs e) { Conditions...... { ViewState["ControlName"]=........ } viewDef=ViewState["ControlName"] UserControl control = (UserControl)LoadControl("~/Controls/" + viewDef + ".ascx"); after this I add control to the RadTabStrip.................. and call bind method......... }
As you can see from above, I am loading my usercontrol in tabMemberDetails_Click event. I see no other choice to do it in OnPreInit. Can anyone answer if this is the right way to do or there is another way that complies with the logic in the links given above.
I have 2 nested datalist that one of them is menudatalist and the other is submenu datalist. whenever I click on my submenu items a dynamic user control should load in dynamic tab. my problem is : one of my usercontrols that is JQGRID does not load in tab and when I click on that submenu Item an empty tab is created,however other user controls are loaded in tabs correctly.
i put asyncfileupload in usercontrol,and i load this usercontrol dynamically,but uploading process do not works. please help me.how to upload image (usercontrol dynamically) and i show this image after upload.
I have dynamic button in tab panel. I want to load a usercontrol through this button in tab panel. but it does not work!!! would some body please tell me why is that happen? I also debug my code and it works correctlly but user control does not load in tab panel.