MVC :: 2 UpdateModel Method With Custom ViewModel And Crucially - PartialViews
Sep 16, 2010
I have a view that gets posted back to my controller and I can call updatemodel pass in the FormCollection and everything in the view gets updated and works great etc... The problem is, this view contains several PartialViews that I just can't seem to get the UpdateModel helper to update. All this stuff is strongly typed, I mean my overall viewmodel has properties that expose the data to my partialviews.
(just for clarity see below code, "Model" has a property called "AreaListViewModel", which has a property called Areas. "AreaList" is the partialview/usercontrol).
<% Html.RenderPartial("AreaList", Model.AreaListViewModel.Areas); %>
I'm convinced it is either something to do with the way I add the data to my partialview, ike HtmlTextBoxFor syntax. OR the UpdateModel syntax. As mentioned I get my form data back as a "FormCollection".
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Details(int Id, FormCollection formData)
When I send a strongly typed ViewModel containing other ViewModels nested inside (basically spanning 3 tables into one object) all the data is correctly presented when debugging. However it complains at rendering time with an exception "Compiler Error Message: CS1061: 'object' does not contain a definition for 'Name' and no extension method 'Name' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)"
and the error is thrown from mvc2-rtm-sourcessrcSystemWebMvcMvcViewPageControlBuilder.cs method: ProcessGeneratedCode line 19
I am having a trouble while trying to create an entity with a custom view modeled create form. Below is my custom view model for Category Creation form.
[code]....
When i click on save button, it doesnt bind the category for me because of i am using custom view model and strongly typed html helpers like that
I am creating a custom control by inheriting a server control, say LinkButton. There are properties like "BorderColor" available in LinkButton. Let's say, I don't want this particular property to be available when I create an instance of the custom control.
I want to completely hide this particular property (I don't want to override it but disable it.)
I have created my own custom role provider class "SGI_RoleProvider" and configured properly.
Everything is working fine.
Suppose that I have added a public method say "SayHello()", then how can i call that. Because if i am using Roles then the method is not displayed. If i am forcefully using that Roles.SayHello() then compiler gives the error.
how can i call this. Because creating a new instance of SGI_RoleProvider is meaningless.
I have created a custom control as can be seen below. this custom control will be used by alot of web form. The question is how to override CheckAllData method in each webform, so i can write my own checking in each webform.
I am creating custom server control. I have two classes in project. One is main class that render control and another will be used to render content based on condition.I just want to know how to render content from other classes in main class.For example. This isjust an example.My main class code
[Code]....
My TopLeftPane class
[Code]....
My page code on page load event
[Code]....
When I run the page, Header title always getting null. This is a just sample code. I will have more than 20 classes so I dont want to write a code in main class to render whole control.I hope all of you understand my problem.
I have been trying to develop edit functionality for a table in database using LINQ to SQL classes (.dbml). Thoiugh updatmodel does not fail, it still does not update the database. I have tried several different things with no resort. I have something going live in a day or so, Below is my code for controller class in MVC 1.1
//Homecontroller.cs //Overload edit view for postback [AcceptVerbs(HttpVerbs.Post)] public object Edit(Guid id, FormCollection form) { //Get the row ID which is being edited var Weballoc = db.WebAllocationImports.Single(w => w.OGReference == id); try { // Weballoc.Side = Request.Form["Side"].ToString(); // Weballoc.Commission = Convert.ToDouble(Request.Form["Commission"]); UpdateModel(Weballoc, new[] { "ClientSubAccount", "Quantity", "TradeDate", "SecurityID", "Side", "Commission", "NetAmount", "TradeID", "Price" }); db.SubmitChanges(); } catch (Exception ex) { } return View("ShowCGMAllocations",allocation); The following is a sample of my edit.aspx view <% using (Html.BeginForm()) {%> <fieldset> <legend>Fields</legend> <p> <label for="ClientSubAccount">ClientSubAccount:</label> <%= Html.TextBox("ClientSubAccount", Model.ClientSubAccount) %> <%= Html.ValidationMessage("ClientSubAccount", "*") %> </p> } <p> <input type="submit" value="Save" /> </p> </fieldset> <% } %>
I've been struggling with this issue for a few days now and I'm still not able to figure it out. I've created a sample project to hopefully help figure this issue out. The main issue is when I load a user from my context and perform an UpdateModel() on this object it seems to delete my entity references and I get null references in child objects. Here is the error: The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deletedHere is the link to the code: Here (line 42, causes the error to happen)
on the line 2 i set new value to OrderDate.but after this step OrderDate get value of text box in view.the value of text box is shamsi date and on line 2 i convert that date to miladi date.why OrderDate get shamsi date?
Trying to get UpdateModel to work for my User. The User class has basic string properties like CompanyName, FirstName, LastName, etc so nothing exotic. Here is the header for my view:
for some reason, when oldIndex is not 0, and the first "for" loop is running, "UpdateModel" is trying to change the ID field instead of the Index field.if it's 0, and only the second "for" is running all goes well.I'm trying to figure out what's the diference between the loops, and i don't seem to get it?
as the behaviour of the UpdateModel<T> changed in MVC 2 (RTM)? Since then I have the following problem when UpdateModel is called:UpdateModel<T1>(record, properties);record is typeof(Jumbo.Juist.Models.Bezorging) and properties is a string[] containing "Winkelnummer" and "OudRoutenummer".This now fails, because a get-property is being accessed: BerekendeAankomstTijd. In the past, it didn't fail. IMHO, this validation should be skipped, because it's only a getter (and thus/also not included in the string[] of properties to update)
Exception Details: System.ArgumentException: Value cannot be null or empty.Parameter name: nameI am following the example in the ASP.NET MVC Framework unleashed page229.
For validate login I need consume wcf, so decide use web-methods
<script type="text/javascript"> function LoginValidate(oSrc, args) { var login = $(".loginField").val();[code]....
For successfull validating I should setup args at ClientValidationFunction, but I get result validation only at callBack. So how can I setup args for validation work.
This is probably something silly I'm missing but I'm definitely lost. I'm using .NET 4 RC and VS 2010. This is also my first attempt to use UpdateModel in .NET 4, but every time I call it, I get an exception saying Value cannont be null or empty. I've got a simple ViewModel called LogOnModel:
[Code]....
My view uses the new strongly typed helpers in MVC2 to generate a textbox for username and one for the password. When I look at FormCollection in my controller method, I see values for both coming through.
And last but not least, here's are post controller methods:
I have a custom control that is based off the gridview control located at: here The control is basically a gridview that automatically creates a column of checkboxes that can be used to "check" individual rows in the gridview. During the gridview's "CreateColumns" event, the "checkboxcolumn" is created dynamically. The checkboxcolumn also contains another checkbox in the header that is used to "select/deselect all" checkboxes in the column. Since the gridview does not automatically remember the state of the checkboxes in the checkboxcolumn on postback, I added a method to the control called "SaveCheckBoxState" which stores the indexes of the checked rows in Viewstate, and then I modified the "OnRowDataBound" event to check the Viewstate and reset the checkboxes based on the Viewstate.
I then added a call to "SaveCheckBoxState" in the gridview's OnSorting and OnPageIndexChanging events. This works great so long as I'm sorting or changing pages. However, I need it to update the viewstate everytime someone clicks or unclicks one of the checkboxes. At this time, the checkboxes are rendered with an onclick event that calls some javascript to highlight the row, or in the case of the checkbox in the header, to select/deselect all checkboxes. I need to call the "SaveCheckBoxState" method from the javascript used by the customcontrol, or I need to find a way to modify viewstate from javascript and perform the same action as "SaveCheckBoxState".
I've tried adding the "SaveCheckBoxState" to the onclick event declaration in the checkboxes, but when run, it simply tells me that the method is undefined. It doesn't exist in the parent page, and I don't think I should have to make an event for the parent page to pass the click to. It seems to me this should be all self contained within the custom control. Does anyone know how I can acheive this? Here is the code for the gridview OnPreRender event where the onclick event of the checkbox is set:
protected override void OnPreRender(EventArgs e) { // Do as usual base.OnPreRender(e); // Adjust each data row foreach (GridViewRow r in Rows) { // Get the appropriate style object for the row TableItemStyle style = GetRowStyleFromState(r.RowState); // Retrieve the reference to the checkbox CheckBox cb = (CheckBox)r.FindControl(InputCheckBoxField.CheckBoxID); // Build the ID of the checkbox in the header string headerCheckBoxID = String.Format(CheckBoxColumHeaderID, ClientID); // Add script code to enable selection cb.Attributes["onclick"] = String.Format("ApplyStyle(this, '{0}', '{1}', '{2}')", SelectedRowStyle.CssClass, style.CssClass, headerCheckBoxID); // Update the style of the checkbox if checked if (cb.Checked) { r.BackColor = SelectedRowStyle.BackColor; r.ForeColor = SelectedRowStyle.ForeColor; r.Font.Bold = SelectedRowStyle.Font.Bold; } else { r.BackColor = style.BackColor; r.ForeColor = style.ForeColor; r.Font.Bold = style.Font.Bold; } } }
I'm developing a website with ASP.NET MVC, NHibernate and Fluent NHibernate and want to know how can I customize my Map to get records using a custom Method.
My entities:
public class ImageGallery { public virtual int Id { get; set; } public virtual string Titulo { get; set; } public virtual IList<Image> Images { get; set; } ublic virtual bool IsActive { get; set; } } public class Image { public virtual int Id { get; set; } public virtual ImageGallery ImageGallery { get; set; } public virtual string Low { get; set; } public virtual bool IsActive { get; set; } }
My Fluent NHibernate Maps:
public class ImageGalleryMap:ClassMap<ImageGallery> { public ImageGalleryMap() { Id(x => x.Id); Map(x => x.Titulo); HasMany(x => x.Images) .KeyColumn("ImageGalleryID"); Map(x => x.IsActive); } } public class ImageMap:ClassMap<Image> { public ImageMap() { Id(x => x.Id); References(x => x.ImageGallery); Map(x => x.Low); Map(x => x.IsActive); } }
And, a method on my ImageRepository class:
public IList<Image> ListActive() { return this.Session.CreateCriteria<Image>() .Add(Restrictions.Eq("IsActive", true)) .List<Image>(); }
If I create an object this way:
ImageGallery ig = new ImageGallery();
I can access my the Image's list using:
foreach(Image img in ig.Images) { ... }
However, ig.Images give me access to all images records and I would like to access just active records (or another criteria), using ListActive()'s repository methods.
The following action in my controller does not update the Model property which is bound by a radio buttons group (all are named "ListType") when the form is submitted. On the Edit.ASPX form, I used JQuery to reset the radio buttons group. When setting other type of input elements on the form to blank or checked=false, those Model properties are set accordingly upon submission. Does anyone know how to set radio buttons to unched state?
Also I am trying to get the SqlException to show up in my form where I have Html.ValidationSummary helper. My ModelState helper captures the know business rules violations, but I am unable to pass any SqlException and its Message property to this helper class due to unexected exception.
I have just upgraded a large project to MVC 2 (50+ controllers) and whilst the project builds fine I am having issues in several places because it looks like the way the Controller.UpdateModel method handles emtpy strings has changed.
In MVC 1 it set the associated property to an empty string but in MVC2 it's setting it to null.