Weston Odom
Weston Odom

Reputation: 311

Updating information in a database from a ViewModel in MVC3

Firstly, I'm very new to this so if this is a simple question answered elsewhere please just link me there; I don't want to waste anyone's time (I tried searching for a long time before posting).

So, moving on, I'm having some trouble updating information in my database (Using EntityFramework) in an MVC3 project. I have a profile controller (using static info and the nullable int right now for testing) that looks like this:

public ViewResult Edit(int? memberID)  
{  
    Member member = repository.Members.GetMember(12985);  
    return View(new ProfileEditViewModel  
    {  
        MemberID = member.id,  
        FirstName = member.fname,  
        LastName = member.lname,  
        HomePhone = member.home_phone,  
        CellPhone = member.cell_phone,  
        Address = member.street,  
        City = member.city,  
        State = member.state,  
        Zip = member.zip,  
        Email = member.email,  
        Sex = member.sex,  
        MemberType = member.membertype,  
        TypeOfCar = member.typeofcar  
    });  
}  

I've then got a strongly typed view that starts like this:

@using (Html.BeginForm()) {

    <div class="editor-label">
        <label for="fname">First Name:</label>
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.FirstName)
        @Html.ValidationMessageFor(model => model.FirstName)
    </div>

and strings the form down for each attribute of my ViewModel except MemberID. It closes with

<p>
    <input type="submit" value="Save" />
    @Html.ActionLink("Cancel", "Summary")
</p>

Back in my controller I then have the complementary method:

    [HttpPost]
    public ActionResult Edit(ProfileEditViewModel memberViewModel)
    {
        Member member = repository.Members.GetMember(memberViewModel.MemberID);
        if (ModelState.IsValid)
        {
            member.fname = memberViewModel.FirstName;
            member.lname = memberViewModel.LastName;
            member.home_phone = memberViewModel.HomePhone;
            member.cell_phone = memberViewModel.CellPhone;
            member.street = memberViewModel.Address;
            member.city = memberViewModel.City;
            member.state = memberViewModel.State;
            member.zip = memberViewModel.Zip;
            member.email = memberViewModel.Email;
            member.sex = memberViewModel.Sex;
            member.membertype = memberViewModel.MemberType;
            member.typeofcar = memberViewModel.TypeOfCar;

            repository.Members.UpdateMember(member);

            return RedirectToAction("Summary");
        }
        else
        {
            //there is something wrong with the data
            return View(member);
        }

The problem is that when I try to update a member's information I get a "Sequence contains no elements" error, even though i know that the MemberID i specified is valid since i was able to get to the update page, and I know the UpdateMember method works correctly since it was tested fully before this part of the project began. Where am I going wrong with the update?

Upvotes: 1

Views: 259

Answers (1)

Rapha&#235;l Althaus
Rapha&#235;l Althaus

Reputation: 60503

You're missing a

@Html.HiddenFor(m => m.MemberID) 

in your view.

Upvotes: 1

Related Questions