MVC :: Saving A Complex Child Object After Post (LINQ To SQL Model Binding With MVC)
Jan 6, 2011
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..
View 10 Replies
Similar Messages:
Jan 5, 2011
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)
AND
Html.TextBoxFor(model => model.NewEmployee.FirstName)
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);
View 2 Replies
Apr 15, 2010
[Code]....
What I want to achieve is the ID of the property: item.Item.ID to be bound to the ID from the (route)URL. However I can't get it to work. I tried using [Bind()] attribute.
I fixed it now using a hidden field in the form like so:
<%= Html.HiddenFor(model => model.Item.ID)%>
However this feels a bit icky. I'd like to know if there is a better cleaner way of doing this?
View 1 Replies
Jun 5, 2010
I have an user view model that has the following properties:
public User user;
public List<Language> Languages;
I send the above model to the view and use html helpers to build the form, so I end up with something like:
<form action="/Users/Edit/5" method="post"><input id="user_UserId" name="user.UserId" type="hidden" value="5" />
First Name
Last Name
Email
Language
Now, I try to read the POST in something that initially was something like :
[AcceptVerbs( HttpVerbs.Post )]
public ActionResult Edit( int UserId, FormCollection form ) {
and cannot get the user.UserId variable, user.FirstName variable etc.
what needs to be done to be able to read this kind of POST request. I'm kind of reluctant to modifying my ViewModel as it is very simple and easy to maintain as it is.
View 2 Replies
Jan 26, 2010
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.
[Code]....
View 1 Replies
Mar 12, 2010
I am receiving Object reference not set to an instance of an Object when binding Child dataGrid in the ItemCommandEvent of Parent dataGrid.
[code].....
View 1 Replies
Jul 30, 2010
how controls (txtbox, radio, etc) are mapped to properties in my Model. Now to the next part : My scenario (example):
Model: three tables: tblPerson, tblPersonOptions, tblOptionsConfig
UI:
Person Name: ______ (required)
Person Age: ________ (required)
radio button: Does Person want to select options? Yes / No ? (required) If yes, then show a checkbox list of options from tblOptionsConfig: (required if yes above). Scenario I tested:
Person Name: Tester User Person Age: Left blank (check if validation error is thrown)
Radion button: Yes. in options check ..let's say 3 out of 5 options. The UpdateModel throws the validation error and the page is returned back to the view(add.aspx).....................
View 9 Replies
Jul 25, 2010
I have a /Register [GET] Action in the controller that pre-poluates a view-model with a string and an integer and returns: return View(myModel);I can see the string being populated in the textarea and the id being populated in a hidden input. Yet when the form gets POSTed, the string value is null and the int value is 0. I verified that both values are posted to the server but the model received in the POST action is missing those values.
View 1 Replies
Dec 29, 2010
I have two model classes:
public class UserModel
{
public Guid Id { get; set; }
public string EmailAddress { get; set; }
public string LoginName { get; set; }
public string Password { get; set; }
}
public class GroupModel
{
public Guid Id { get; set; }
public string Name { get; set; }
public List<UserModel> Users { get; set; }
}
I created a View (Create.Aspx) by inheriting GroupModel class.
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<MyApp.Models.GroupModel>" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Create</title>
</head>
<body>
<% using (Html.BeginForm()) {%>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%: Html.LabelFor(model => model.Id) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Id) %>
<%: Html.ValidationMessageFor(model => model.Id) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Name) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Name) %>
<%: Html.ValidationMessageFor(model => model.Name) %>
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
</body>
</html>
It is generating only two fields (Id, Name) in my aspx view. Also I am able to get the form data in the Model class object in ё[HttpPost]ё request which contains the data for ID and NAME field in controller.
[HttpPost]
public ActionResult Create(GroupModel groupModel)
{
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
How can I get the data in List<UserModel> object? I am thinking to Put a List control with checkboxes containing Users. Then catch them using FormCollection object in controller.
View 1 Replies
Jul 16, 2010
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?
View 1 Replies
Mar 15, 2010
In my past I had created the following web page in web forms and I'm learning asp.net mvc right now , I had given it a tought and I run into conclusion I really wont know how to do the same page with asp.net mvc
before explaining you the actuall problem I would explain you the Model The model is a pretty simple , it for few columns which are bool , and a lot of them which are varchar(MAX) The View is built the following way
the bool parts of curse got a check box but the varchar parts are the complicated ones In my web form page i got the following code for each varchar property in my database
[Code]....
my server script gets the following page apon submit and checks if radio button 1 or 2 is selected if 1. it inserts the link as it is into colmn property while if it is 2. it saves the file on the server and saves the file location into the colmn property.
View 3 Replies
Feb 20, 2011
I want to be able to update a model and all its collections of child objects in the same view. I have been referred to these examples: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx and http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/ .
For example, I have an object Consultant, that has a collection of "WorkExperiences". All this is in an Entity Framework model. In the view, the simple properties of the Consultant object is no problem, but the collection I cannot get a textbox to show up for. I tried following the examples in the links above, but it doesn't work. The problem is, in those examples the model is just a list (not an object with a child list property). And also, the model again is an EF model. And for some reason that doesn't seem to work as in those examples.
[Code]....
This stuff with the EditorTemplate works fine in Phil Haack's sample project, which I downloaded to try, but here, with the EF model or whatever the problem is, I don't get any textbox at all. The table in the view is just there as a test, because in the table I do get the rows for WorkExperiences, whether I add an empty WorkExperience object or fill out its properties doesn't matter, the rows show up for each object. But again, no textbox...
View 2 Replies
Feb 3, 2011
I have a question regarding validation of drop-down list values. I have a view that is bound to a view model type called ReservationData.
This object contains a property CustomerVehicles of type List<VehicleData>. VehicleDatahas two int properties VehicleMakeId and VehicleModelId.
On my view I am trying to loop over the number of items in the CustomerVehicles collection and displaying two dropdowns for each, a vehicle make dropdown and a vehicle model dropdown usingDropDownListFor.
When I try to submit and validate I do not see any validation errors displayed on the screen.
Just in case you are wondering I have added a ValidationMessageFor for each dropdown as well. I am not sure if this is an issue with the structure of my view model and its complexity and how the controls need to be named or how the ids need to be set.
Here is the code for the looping over the collection:
[Code]....
View 11 Replies
Aug 28, 2010
consider classic example: Product and Category editing Product in dropdown Id of Category is selected - Category mapped as object with all fields empty except Id when submitting Product edit form - validation gives an error: "Category name is required" (I have Required attribute on Category Name property)
How deal with such errors if I want to use built-in validation (
[Code]....
Writing custom data binder which would fill all such id-only-objects with values from database comes to mind.
upd: I did small research of mvc code and found out that validation happens before binding - so this solution would't work.
View 13 Replies
Oct 25, 2010
I have a somewhat complex model that I need to pass to a MVC 2 Create view so its properties can be filled out. I'm not sure how to actually create this model as it has some relationship data that must also be filled out during the creation process.My main model is a Game. Most of its properties are scalar. It contains a foreign key to Content, for the game reviews, and there's a many-to-many relationship between Games and Platforms - games can be on a variety of platforms (PS3, XBox 360, etc.), and each platform has a library of games.When I pass data to my Edit view, it's as simple as:
[Code]....
I'm unsure what to do in the case of Create as I'm not sure how to link the associated parts - Content and Platforms - to a Game object.
View 1 Replies
Apr 21, 2010
I'm trying to implement a recipe search page that allows users to specify search criteria by selecting checkboxes that match desired recipe attributes. All the data is stored in a database uing tables with 1 - many relationships. Each recipe can have multiple attributes from any of 5 attribute tables. I want to find all the recipes that match the user-selected criteria and display them in a grid. For example, the user may want a breakfast (attribute 1) recipe that is made with fruit and milk (attributes 2 and 3), is low-fat and high fiber (attributes 4 and 5), and takes less than 15 minutes to prepare (attribute 6). The query for this example might look something like:
SELECT distinct recipes.name, recipes.difficulty, recipes.preptime, recipes.cooktime
FROM recipes, recipeMeals, recipeDishes, recipeFoodGrps, recipeNutrients, recipeFixTimes
WHERE recipes.id = recipeMeals.recipeId and recipes.id = recipeDishes.recipeId and recipes.id = recipeFoodGrps.recipeId and recipes.id = recipeNutrients.recipeId and recipes.id = recipeFixTimes.recipeId and recipeMeals.mealId in (1) and
recipeDishes.dishId in (5) and recipeFoodGrps.fdGrpId in (1, 6) and recipeNutrients.nutrAttsId in (2, 3) and recipeFixTimes.fixTimeId in (1)
I' can generate the SQL but can't figure out how to bind it to a grid control. No could I see how to get any of the data controls to build the query for me. Is there a way to say "execute this query and display the results in a GridView"?
View 4 Replies
Oct 15, 2010
We know that using something like Bind("CustomerName") can be used in the Text property of a label control inside a gridview, where CustomerName is a property of the object whose collection is bound to the gridview. If that property is of a complex type (object of another class), how do we use a property of that inline object as a binding for the gridview column?
View 3 Replies
Nov 15, 2010
The problem which I present involves needing a more complex string comparison mechanism with Linq to handle user driven queries of irregularly formatted data. The one instance I will use to explain this problem is phone numbers. To search a phone number you want to compare just the numbers (This system has to be able to handle internation as well as US domestic numbers). So users have been able (through many years) to enter phone numbers in any format they desire, ex:
555.555.5555
or
+1 555 555 5555
or
(555) 555-5555
etc
So I have a query I would LOVE to use, but because SQL cannot translate regx objects I have very few options that I am aware of. The query I want to use is as follows:...............
View 3 Replies
Apr 4, 2010
I am looking at ASP.NET MVC2 and trying to post a complex object using the new EditorFor syntax.I have a FraudDto object that has a FraudCategory child object and I want to set this object from the values that are posted from the form.Posting a simple object is not a problem but I am struggling with how to handle complex objects with child objects.I have the following parent FraudDto object whcih I am binding to on the form:
public class FraudDto
{
public FraudCategoryDto FraudCategory { get; set; }
[code]...
View 1 Replies
Feb 5, 2010
I have two business objects mapped via LINQ to tables. One of the objects contains an instance of the other object and share a key as an identifier.I want to retrieve Class A and within class A all of Class B's values as well. What I am doing is this:
[Code]....
[Code]....
This seems a little clunky, as in slow. Is there a better way to get the Class B (User) information without making a query every time?
View 4 Replies
Feb 17, 2010
On DBML I have two entities as Parent, Child. I am trying to assign Child class properites in a Parent.
[code]....
I am getting the following Error:
Cannot access a disposed object.
Object name: 'DataContext accessed after Dispose.'.
View 2 Replies
Jun 8, 2010
I am very new to entity, sql, c#, and asp.net so this might be something easily fixed. I am attempting to display all the inactive products stored in my table called products in a datagrid.
var productQuery = from b in solutionContext.Version
where b.Product.Name == search && b.Product.ActiveNumber > b.VersionNumber
select new Product
{
Name = b.Product.Name,
Description = b.Product.Description,
ID = b.ID,
LastNumber = b.Product.LastNumber,
MiddleNumber = b.Product.MiddleNumber,
RSTATE = b.RSTATE,
ActiveNumber = b.Product.ActiveNumber,
LastModified = b.Product.LastModified,
ParentID = b.Product.ParentID,
ProductType = b.Product.ProductType
};
ProductsGrid.DataSource = productQuery;
ProductsGrid.DataBind();
I am getting this error: $exception {"The entity or complex type 'SolutionsModel.Product' cannot be constructed in a LINQ to Entities query."} System.Exception {System.NotSupportedException}
View 1 Replies
Jun 12, 2010
I'm using ASP.NET MVC 2 and am struggling with saving child entities. I have an existing Invoice entity (which I create on a separate form) and then I have a LogHours view that I'd like to use to save InvoiceLog's, which are child entities of Invoice. Here's the view:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<TothSolutions.Data.Invoice>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Log Hours
</asp:Content>.......
In the SaveHours action, it properly sets the values of the InvoiceLog entities after I call TryUpdateModel but when it does SaveChanges it doesn't update the database with the new values. Also, if you manually update the values of the InvoiceLog entries in the database and then go to this page it doesn't populate the textboxes so it's clearly not binding correctly.
View 1 Replies
Aug 13, 2010
I have developed a website that allows users to upload office documents then uses the office object model to convert the document to an HTML file that it then displays in an iFrame. I have, of course, included references to Office.interop.word, and the site works fine on my development machine. When I uploaded it to my production server the site functions fine until I try to upload a document. I initially got a similar error that said "COM object not registered". I realized that Word wasn't installed on my production server. So I installed word and now when the server tries to access the word object model I receive the following error:
Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80070005 Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
I searched the registry for the corresponding CLSID and found a corresponding folder. I added full control to the IUSR_ account and due to the persistence of the error I eventually added full control to "everyone" and ensured these permissions inherited down to the rest of the folder. I then added full control to IUSR_ and again eventually added full control to "everyone" to my microsoft office folder. I don't know what other permissions to grant and where in order to make this "Access is denied" error go away. I must be granting them in the wrong place, because as far as I know I can't be any more permissive than "Everyone" "Full Control".
View 1 Replies
Jul 23, 2013
I am trying to call web service from jquery..trying following way but i am not able to pass to complex type parameter to WCF service.My wcf function is as follows
<OperationContract()>
<Web.WebGet(UriTemplate:="/GetData?strErrMsg={strErrMsg}&chrErrFlg={chrErrFlg}", ResponseFormat:=WebMessageFormat.Json, BodyStyle:=WebMessageBodyStyle.Wrapped)> _
Function GetData(ByRef strErrMsg As System.Collections.Generic.List(Of String), ByRef chrErrFlg As String) As String
strErrMsg is System.Collections.Generic.List(Of String)
I am trying to call as follows
var Type;
var Url;
var Data;
var ContentType;
var DataType;
var ProcessData;
var parameters;
[code]...
And I am able to call other methods in same way having string and integer parameter.I have gone through this but didnt get anything. URL...
View 1 Replies