Some JQuery/ To Add The Item Into The Collection Without Having Full Postback?
Jan 29, 2010
I have never done jquery and need some assistance/advice on something I am trying to do.I basically have an ASP.NET MVC Application.
What I want to do is, asynchronously be able to do a partial postback when a button is pressed.It's a simple application that should add items and retrieve existing items from an IEnumberable<T> collection.
so, when a button is pressed, it should be able to add the item into the collection on the ASP.NET site without having to do a full postback.
all elements are in an updatepanel. click on a list of <tr> to fire a JavaScript function to add new <option> to the asp dropdownlist. But, when I click on other buttons to callback to the server, I get an error message:
Uncaught Sys.WebForms.PageRequestManagerServerErrorException: Sys.WebForms.PageRequestManagerServerErrorException: Invalid postback or callback argument. Event validation is enabled using
in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation. I understand the problem. I need to let server side know the change of the dropdownlist before any other postback. Set validation as false won't work in this case, the dropdown will lose the new item anyway. I did some researches, and the possible solutions:
1)Using ViewState? Request Form? could anyone give an example?
2)Add dropdownlist item in server side. But I want to make the whole tr row clickable to fire the event. Could I click on tr and fire eg. its first child linkbutton or a linkbutton in somewhere else.
3)I've tried Jquery.ajax and webmethod , it can fire server event but since all method are static (shared) , it doesn't allow me to edit the downdownlist instance.
As it stands right now, I have a literal control on my page. In my code-behind, I'm using StringBuilder to generate some JavaScript. Also on that page I have a item collection. What I want to do is for each item in my item collection, generate my literal which will in essence generate my JavaScript. Here is an example of my code-behind now. I'm ok with doing something different, but I just need to generate said JavaScript for every item in the collection and I'm not sure how to do it.
System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append("<script type='text/javascript'>"); sb.Append("mboxCreate("product_productpage_rec","); sb.Append(""entity.id=" + _prodID + "","); sb.Append(""entity.categoryId=" + _categoryID + "","); sb.Append(""entity.name=" + _prod.Title + "","); sb.Append(""entity.pageURL=" + Request.Url.ToString() + "","); //The following value has been taken from the productImageControl code behind. //Might have to refactor in future as a property of the image control. string filename = AppSettingsManager.Current.ProductImagePathLarge + _prod.ActiveProductItemCollection[0].Sku + AppSettingsManager.Current.ProductImageExtension; sb.Append(""entity.thumbnailURL=" + filename + "","); sb.Append(""entity.inventory=" + _prod.ActiveProductItemCollection.Count + "","); sb.Append(""entity.value=" + _prod.ActiveProductItemCollection[0].ActualPrice + "","); sb.Append(""entity.ProductItemID=" + prodItem.Id + "","); sb.Append(""entity.addToCartImg=~/Images/Buttons/btn_AddToCartFlat.gif");<"); //The last line has to be /script. < inserted on prev line. do not change it or bad things will happen. sb.Append("/script>"); //add script to page this.LiteralMBoxScript.Text = sb.ToString();
Dim iCounter as Integer Dim iQuantity as Integer = 10 Protected Sub btnFoo_Click Handles btnFoo Yadda For i as Integer = iCounter to iQuantity - 1 //do something with AsyncPostBackTrigger until iCounter = iQuantity - 1 //then trigger a full postback Next End Sub
I am new to the concept and feel like there must be something really easy that I am missing.
I implemented the AsyncFileUpload control on a web page. This web page requires uploaded files to appear in a gridview. The gridview contains the following columns: "File Name", "Confidential" Check Box, and a "Remove" button to remove the uploaded file.
Since the AsyncFileUpload postback does not do a full page postback, I need to "force" a postback on the OnClientUploadComplete event of the AsyncFileUpload control in order to render the gridview after uploading a file. In the OnClientUploadCompleteevent, I use javascript to call __doPostBack. In this postback, I only bind my gridview and display the file information (I don't re-save the file).
The problem: On the AsyncFileUpload's first "partial" postback, the file is successfully uploaded, as expected. On the second postback that I force with __doPostBack, the file is re-uploaded. You can verify this by using Google Chrome, which displays the upload progress. The behaviour is as follows: After selecting the file, the progress increments from 0% to 100% and the file is uploaded. After this, the __doPostBack executes, and you can see the upload progress increment again from 0% to 100%.
How can I make sure the Gridview is properly populated, but that the file is not uploaded twice?
I attached a sample solution which contains the issue:
I have a collection of Contacts that inherits from CollectionBase:
public class ContactCollection : CollectionBase{ //... }
each contact in the collection has a unique ID:
public class Contact{ public int ContactID{ get; private set; } //... }
I think what I would like to do is something like the following:
// get the contact by their unique [Contact]ID Contact myPerson = Contact.GetContactById(15); // get all contacts for the customer ContactCollection contacts = customer.GetContacts(); // replaces the contact in the collection with the // myPerson contact with the same ContactID. contacts.ReplaceAt(myPerson); // saves the changes to the contacts and the customer // customer.Save();
There are quite a few questions around this topic,but I can't seem to get it figured out.I'm trying to bind a listbox to an ObservableCollection and keep the listbox updated when items are added to the collection.
[code]...
Beyond this, I have a simple textbox and button on a page.When a name is entered into the textbox,and the button is clickedI call the addBlog(passing in name from textbox) sub routine in the ITRSBlogs Class (back up the page a bit) to add the item to the collection.Problem is,when I add an item to the collection,the listbox is not updated.I'm new to Observable Collections (and many other things : ),so maybe I'm just really off here.
I'm having few UpdatePanels on my master page. And then, I have RadTreeViewcontrol on the page, that should cause partial postback each time node is clicked. Everything works fine there. Since I'm using the same tree on some other pages, I moved this functionality to UserControl. Stuff I've done before, so no problem. Moved some code to ascx, created some events. Everything always worked for me well. But not now. RadTreeView is nested inside UserControl, and this control on master page with update panels, see below:
Imports Telerik.Web.UI Public Class ProductTree Inherits System.Web.UI.UserControl Public Event NodeExpand As EventHandler(Of ProductTreeNodeExpandEventArgs) Public Event SelectedNodeChange As EventHandler Protected Sub ProductTree_NodeExpand(ByVal sender As Object, ByVal e As RadTreeNodeEventArgs) _ Handles treeProductTree.NodeExpand Dim nodeId As Integer = CInt(e.Node.Value) Dim evetArgs = New ProductTreeNodeExpandEventArgs(nodeId) RaiseEvent NodeExpand(Me, evetArgs) //'some logic End Sub Protected Sub ProductTree_OnNodeClick(ByVal sender As Object, ByVal e As RadTreeNodeEventArgs) _ Handles treeProductTree.NodeClick RaiseEvent SelectedNodeChange(Me, New System.EventArgs()) End Sub End Class
What I don't know is: why is this causing full postback instead of partial? I suspect that it may have something to do with raising my for SelectedNodeChange, but I don't know how to deal with it other way. I need to let other components know, that node selection changed. How can I improve this to make it work with UpdatePanels?
I have run into what seems to be a very famous problem: My updatepanel fires a full postback instead of a async postback. The normal solution is to give all controls you add dynamically an ID, which I have done, but I still get a full postback instead of my async postback. Here's the code:
So, I actually add an AsyncPostBackTrigger to the menu, so the ItemCommand event should be registered. What happends when I click an item in this contextmenu, is a full postback happends. I have been trying to play with the ChildrenAsTriggers property without help.
I'd like to programmatically force a full page postback to occur after an event is fired by one of the child controls. I can't add any triggers to make this work so it will have to be done via code.
I have an UpdatePanel with a button that, when clicked, calls a WebService. I attached an UpdateProgress to it that shows a "loading" gif while it runs. Everything works fine, but I need a full PostBack once the operation is complete because I'm using my company's custom template that displays an info message and enables a "Next" button upon completion.I've had partial success with the endRequestHandler but I'm not sure what to put in my function to force a full postback once the UpdatePanel has run its course. I'm getting into the endRequestHandler function but I have been unable to successfully get a full PostBack.Here is my current code (including several attempts), the bottom part being the focus:
I am aware that a FileUpload requires a full page postback. I read the article http://www.4guysfromrolla.com/articles/090209-1.aspx[^]I tried to install a PostBackTrigger programmatically to get a full postback only on the ImageButton1 control. All other postbacks must be partial. (GridView sorting, paging, ...)In code behind I do :
[Code]....
The above code does not seem to install a full postback only for the ImageButton1, so the file upload fails. How can I make this work ?
This gives a quite strange result: Every 5s my whole page gives a full postback. When I comment in (activate) the asyncpostbacktrigger, the updatepanel does not give a full postback. In the PlayerItems_ItemDataBound I have the following code (which, I do think, do not matter):
protected void PlayerItems_ItemDataBound(object sender, ListViewItemEventArgs e) { if (e.Item.ItemType == ListViewItemType.DataItem) { ListViewDataItem dataItem = e.Item as ListViewDataItem; if (dataItem != null) { BaseItem myItem = dataItem.DataItem as BaseItem; Panel itemPanel = new Panel(); Literal firstLiteral = new Literal(); firstLiteral.Text += "<div id='smoothmenu1' class='ddsmoothmenu'>"; firstLiteral.Text += "<ul>"; firstLiteral.Text += "<li><img src='Images/Game/Items/" + myItem.ItemImageUrl + "' />"; firstLiteral.Text += "<ul>"; // Add all events bound to item into contextmenu itemPanel.Controls.Add(firstLiteral); foreach (Delegate del in myItem.Actions.Items) { Literal firstItLit = new Literal(); firstItLit.Text += "<li>"; itemPanel.Controls.Add(firstItLit); MethodInfo methodInfo = del.Method; string commandName = myItem.ItemId + "|" + methodInfo.Name; LinkButton btn = new LinkButton(); btn.Text = methodInfo.Name; btn.Click += new EventHandler(btn_Click); btn.CommandName = commandName; itemPanel.Controls.Add(btn); Literal secondItLit = new Literal(); secondItLit.Text += "</li>"; itemPanel.Controls.Add(secondItLit); } Literal btnLiteral = new Literal(); btnLiteral.Text += "</ul>"; btnLiteral.Text += "</li>"; btnLiteral.Text += "</ul>"; btnLiteral.Text += "</div>"; itemPanel.Controls.Add(btnLiteral); Panel panel = (Panel)(e.Item.FindControl("ItemPanel")); panel.Controls.Add(itemPanel); } } }
When I create a NEW updatepanel, ItemsUpdatePanel1, it does not fire a full postback without the timer. I can even start copying items from ItemsUpdatePanel to ItemsUpdatePanel1, and suddenly the full postbacks happen. I tried 2 seperate times, and they started happening at different times.
I have got the following gridview with a UpdatePanel and approve and save button in each row. How do I create a full postback if approve button is click and asyncPostback if save button is click.
I have a webform which has an updatepanel with a combobox, add button, delete button and a table. The functiion of the two buttons is to add or delete table rows. However, the table is getting cleared everytime the combobox item is selected. Is there anotherway of retaining the table contents?The code for the updatepanel is:
I am having an issue with an update panel, which is still causing the entire page to postback.
I have made sure i have all the correct bits in the web.config, section groups, httphandlers, httpmodules, additonal assemly etc... but it still does not work. I have got it to work in a way,which is why i think i have the config right, because if i take the search panel of and place it outwith the update panel, the go button only postsback the rest of the page not what is inside the updatepanel.
I am using a master page, but the update panel only appears in the content page, within the content tags.
I have a search page with a TextBox that allows someone to type in a search term and press enter. (Which fires TextChanged). I have a DropDownList that specifies the kind of search that will be performed. It is defined in the markup as follows:
As you can see, AutoPostBack is set to false, and there is no event hookup.
Pressing enter fires the OnTextChanged event for the TextBox, which performs a search and updates a GridView in an UpdatePanel. This UpdatePanel has its UpdateMode set to conditional and has one trigger: the TextChanged event of the search TextBox.
It's very simple.
And it works beautifully, almost.
Whenever I change the search type, the very next search does a full postback. All subsequent searches do partial postbacks (as desired) unless I change the search type again.
There is one exception to this rule: if I load the page and immediately change the search type, it doesn't do a full postback. So the first change of the DropDownList before any postback (full or partial) does not trigger a full postback.
Full Disclosure: I'm doing a lot of JavaScript to change the appearance of the gridview during async requests. I don't detail it here because it seems unrelated. This problem only occurs when a DropDownList with no JavaScript wired up is changed.