2009-08-20 15 views
0

Ich habe Probleme mit der Bindung von Werten aus einer Sicht auf ein Objekt. Irgendwie bekommt das Objekt dann alle Werte auf null gesetzt.Kann BindAttribute nicht zum arbeiten

In meinem Viewmodel habe ich:

public class UserAdminEditViewModel 
{ 
    public User User { get; set; } 
    public IEnumerable<Usergroup> Usergroups { get; set; } 
    public IEnumerable<User> Users { get; set; } 

    public UserAdminEditViewModel() {} 
} 

In meinem Controller habe ich:

[AcceptVerbs(HttpVerbs.Post)]  
public ActionResult UserEdit(
    [BindAttribute(
     Include="UserID,UserName,Email,Password,Firstname,Surname")] 
    UserAdminEditViewModel User, 
    int[] UsergroupID) 
{   
    if (ModelState.IsValid) 
    { 
     try 
     { 
      for(int i = 0; i < UsergroupID.Length; i++) 
      {       
       User.User.Usergroups.Add(
        _ug.GetUsergroups(UsergroupID[i]).First());  
      } 

      _us.SaveUser(User.User); 

Und in meinem Edit-Ansicht Ich habe:

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

etc etc ..

Ich habe versucht mit:

<%= Html.TextBox(
     "User.Username", Model.User.Username, new { id = "User.Username" }) %> 

etc, aber das funktioniert auch nicht ... nur funktioniert, wenn ich BindAttribute entfernen ...

Wie kann ich dieses Problem beheben, kann ich nicht alle Modelle Spalten passieren ...

Vielen Dank im Voraus /M

Antwort

0

Bestanden in der falschen Klasse an die Postback Aktion

0

ein Attribut zu verwenden, müssen Sie den Namen angeben, ohne das „Attribut“ Teil des Namens der Klasse, wie:

public ActionResult UserEdit([Bind(Include="UserID,UserName,Email,Password,Firstname,Surname")]UserAdminEditViewModel User, int[] UsergroupID) 
{ 

Zum Beispiel ist AcceptVerbs auch ein Attribut, und die damit verbundene Klasse AcceptVerbsAttribute genannt ...

Ein weiteres Detail: Die Controller-Klasse enthält eine Eigenschaft namens Benutzer, die den authentifizierten Benutzer darstellt, der den Anruf an die Eingeweihten Aktionsmethode. Wenn Sie einen Parameter mit dem Namen Benutzer erstellen, wird einfach die Benutzereigenschaft "Standard" ausgeblendet. Vielleicht möchten Sie den Namen Ihres Parameters ändern!

Sie können aber nach wie vor die User-Eigenschaft des Controllers Zugriff durch

base::User 
+0

ich geändert: [Bindung (Include = "UserID, Benutzername, E-Mail, Passwort, Vorname, Nachname")] UserAdminEdit ViewModel userobj dasselbe Ergebnis :( –

+3

Die Verwendung des Attributs Suffix ist optional. Sie sind äquivalente Aussagen. –

0

Haben Sie versucht, das Präfix zu dem Bind-Attribute hinzufügen, entweder als Prefix Eigenschaft oder als Teil des Includes, zB:

public ActionResult UserEdit([Bind(Include="User.UserID,User.UserName,User.Email,User.Password,User.Firstname,User.Surname")]User User, int[] UsergroupID) 
+0

versucht, das als gut, das gleiche Resultat, sind alle null –

+0

Ihrer Meinung ändern: <% = Html.TextBox ("user.username", Model.User.Username)%> <% = Html.TextBox (“ User.Firstname“, Model.User.Firstname)%> zu: <% = Html.TextBox ("user.username")%> <% = Html.TextBox ("User.Firstname")%> Der Ordner erhält keine Chance zu arbeiten, Sie überschreiben ihn. – Kieron

+0

Gleiches Ergebnis, Objekte kommen als Null zurück –