2010-11-19 6 views
0

je le code suivant dans mon contrôleur:MVC - Valeur par défaut dans le champ

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Create([Bind(Exclude = "Id")] BackupSet AccountToCreate) 
    { 
     if (!ModelState.IsValid) 
      return View(); 

     _DBE.AddToBackupSet(AccountToCreate); 
     _DBE.SaveChanges(); 

     return RedirectToAction("Index"); 
    } 

je dois avoir la valeur de User.Identity.Name réglée sur la valeur de l'un des champs de la création voir quand je l'affiche dans la base de données.

Je suis sûr que c'est très simple mais ne sais vraiment pas comment.

Merci, Steve.

Répondre

0

l'un des champs en vue?

que diriez-vous simplement la mise en

ViewData["Name"] = User.Identity.Name 

puis dans Voir l'utiliser partout où vous voulez.

+0

vais essayer de vous expliquer un peu plus. –

+0

Rob a expliqué plus en détail dans sa réponse ce que je voulais dire. – neebz

0

Réponse courte:

HttpContext.Current.User.Identity.Name 

Réponse longue:

Vous devriez probablement faire un service d'adhésion pour fournir cette valeur. Le projet par défaut MVC2 fournira l'interface IMembershipService que vous pouvez étendre à fournir des biens: CurrentUserName (ou tout ce que vous voulez)

public string CurrentUserName 
     { 
      get 
      { 
       var context = HttpContext.Current; 
       if (null != context) 
        return context.User.Identity.Name; 

       var user = Thread.CurrentPrincipal; 
       return (null == user) 
          ? string.Empty 
          : user.Identity.Name; 
      } 
     } 
1

Pourquoi avez-vous besoin de stocker le nom d'utilisateur dans la vue? Vous serez sûrement lancer la transaction DB à partir d'un contrôleur si c'est le nom d'utilisateur pour l'utilisateur qui est actuellement connecté utilisé le MembershipProvider selon la dernière suggestion:

HttpContext.Current.User.Identity.Name 

Sinon peut-être vous devriez envisager de créer un conteneur/classe wrapper qui représente clairement votre modèle View - certains pourraient considérer cette surpuissance pour une propriété supplémentaire mais je déteste les "chaînes magiques" dans le code.

public class MyView 
{ 
    public string UserName { get; set; } 
    public MyObject MyMainObject { get; set;} 

    public MyView(string username, MyObject myMainObject) 
    { 
     this.Username = username; 
     this.MyMainObject = myMainObject; 
    } 
} 

puis définissez votre vue type de modèle que:

System.Web.Mvc.ViewPage<MyNamespace.MyView> 

cela, alors vous permet d'avoir des propriétés fortement typées pour tout votre point de vue par exemple

<%=Model.Username %> 
<%=Model.MyMainObject.Title %> 

et dans votre contrôleur, vous pouvez paramétrer votre action comme

public ActionResult(MyMainObject myMainObject, string username) 
{ 
    //Do something here 

    //if not correct 
    return View(new MyView(username, myMainObject)); 
} 

Si au contraire vous vouliez aller dans cette voie:

ViewData["Name"] = User.Identity.Name; 

ou

ViewData.Add("Name", User.Identity.Name); 

Tenir compte créer Enums pour éviter encore une fois usin g littéraux de chaîne, par ex.

public enum UserEnum 
{ 
    Username, 
    Password 
} 

puis utilisez:

ViewData.Add(UserEnum.Username.ToString(), User.Identity.Name); 
+0

OK, je suis maintenant sur la bonne page. La réponse est que je n'aurais pas dû le faire dans la vue. Je viens d'ajouter AccountToCreate.agency = User.Identity.Name; à mon code de contrôleur et ça fonctionne maintenant un régal, désolé, il a fallu du temps pour que je me mette la tête autour, facile quand on sait comment !! –

Questions connexes