tags:

views:

41

answers:

1

Hello

I have a model that looks like this:

public class UserAdminEditViewModel
{
    public User User { get; set; }
    public IEnumerable<Usergroup> Usergroups { get; set; }
    public IList<int> UsergroupID { get; set; }

    public UserAdminEditViewModel() {}
}

And my View looks like this:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/AdminSite.Master" Inherits="System.Web.Mvc.ViewPage" %> UserEdit

<h2>UserEdit</h2>

<%= Html.ValidationSummary("Edit was unsuccessful. Please correct the errors and try again.") %>

<% using (Html.BeginForm()) {%>

    <fieldset>
        <legend>Fields</legend>
        <p>
            <label for="Username">Användarnamn: *</label>
            <%= Html.TextBox("Username", Model.User.Username) %>
            <%= Html.ValidationMessage("Username", "*") %>
        </p>
        <p>
            <label for="Firstname">Förnamn: *</label>
            <%= Html.TextBox("Firstname", Model.User.Firstname) %>
            <%= Html.ValidationMessage("Firstname", "*") %>
        </p>
        <p>
            <label for="Surname">Efternamn: *</label>
            <%= Html.TextBox("Surname", Model.User.Surname) %>
            <%= Html.ValidationMessage("Surname", "*") %>
        </p>
        <p>
            <label for="Email">E-post: *</label>
            <%= Html.TextBox("Email", Model.User.Email) %>
            <%= Html.ValidationMessage("Email", "*") %>
        </p>
        <p>
            <label for="Password">Lösenord: *</label>
            <%= Html.TextBox("Password", Model.User.Password) %>
            <%= Html.ValidationMessage("Password", "*") %>
        </p>
        <p>
            Användargrupper: <br />
            <%= Html.CheckBoxList(Model.Usergroups.Select(ug => ug.UsergroupID.ToString()), Model.Usergroups.Select(ug => ug.UsergroupName), "UsergroupID") %>
        </p>
        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>

<% } %>

<div>
    <%=Html.ActionLink("Tillbaka till användare", "Users") %>
</div>

My controller looks like:

public ActionResult UserEdit(int? userID)
    {
        User u;

        if (userID == null)
        {
            u = new User();
        }
        else
        {
            u = us.GetUsers(userID.Value).SingleOrDefault();
        }



        return View("UserEdit", new UserAdminEditViewModel { User = u, Usergroups = ug.GetUsergroups() });
    }


    [AcceptVerbs(HttpVerbs.Post)]
    //public ActionResult UserEdit([BindAttribute(Include = "Firstname,Surname,Username,Email,Password,UserID,UsergroupID")]User userobj, IList<int> UsergroupID)
    public ActionResult UserEdit(UserAdminEditViewModel userobj)
    {
        if (ModelState.IsValid)
        {
            try
            {

                //userobj.UsersUsergroups = new UsersUsergroup { UsergroupID = UsergroupID.ToList() };

                //us.SaveUser(userobj);
            }
            catch
            {
                ModelState.AddModelError("SomeError", "errrrrrrrrror");
            }
        }

        return View();
        //return View("UserDetail", new UserAdminEditViewModel { User = userobj });
    }

Problem:

If I use the UserAdminEditViewModel I created, only values for IList UsergroupID gets set (which is a list of checkboxes named UsergroupID). If I use the User class I can access all the user properties as firstname etc gets filled in.

Why doesnt the User object get populated in the UserAdminEditViewModel on post? Whats missing?

Thanks in advance /M

EDIT:

View is strongly typed to "BookingSystem.MVC.ViewModels.UserAdminEditViewModel"

can't make it show in this editor

A: 

use

<%= Html.TextBox("User.Firstname", Model.User.Firstname) %>

. Check in the rendered view. The Formfields should render:

 <input  type="text" name="User.Firstname" />
Malcolm Frexner