2009-07-22 5 views
0

J'ai un UserController et un Edit.aspx. Il y a un champ qui est ma clé primaire, donc je ne veux pas permettre aux utilisateurs d'éditer ce champ.asp.net-mvc/linq à sql - ai-je toujours besoin d'un HTML.TextBox pour faire un edit save?

Le problème est que si je retire la

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

puis quand la magie de asp.net-mvc appelle mon code contrôleur:

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Edit(int id, tblMailingList user_) 
    { 
     try 
     { 
      repo.UpdateUser(user_); 
      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      return View(); 

le champ email de la tblMailingList est nulle. Le problème est que j'ai besoin de cela comme la recherche dans la table pour récupérer l'enregistrement en cours et, évidemment, si elle est nulle, je reçois une exception.

Lorsque je remets la zone de texte pour ce champ, cela fonctionne correctement. Il semble fou que je devrais avoir un textbox et permettre l'édition pour passer ce champ au contrôleur. J'ai essayé de le mettre dans une étiquette et il apparaît toujours comme nul dans le contrôleur.

des suggestions?

Répondre

3

Ma première question serait pourquoi faites-vous la recherche sur le champ Email et pas le champ Id?

Vous pouvez transmettre les paramètres de votre déclaration Form à transmettre à votre contrôleur. Je ne suis pas sûr si j'ai obtenu la déclaration de la méthode correcte alors s'il vous plaît vérifier.

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(int id, string email, tblMailingList user_) 
{ 
    try 
    { 
     repo.UpdateUser(user_); 
     return RedirectToAction("Index"); 
    } 
    catch 
    { 
     return View(); 

Je recommande de mettre à jour un peu différemment que votre utilisateur tblMailingList ne sera pas valide pour être mis à jour dans votre référentiel.

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(int id, FormCollection form) 
{ 
    tblMailingList user = repo.GetUser(id); // get the user using the id 
              // so we can update in the same 
              // context 
    UpdateModel(user); // this will automatically update 
         // your user model with values 
         // from the form 

    try 
    { 
     repo.UpdateUser(user); 
     return RedirectToAction("Index"); 
    } 
    catch 
    { 
     return View(); 
0

Si vous voulez juste un champ qui pourrait passer au contrôleur qui doit être invisible dans le formulaire, Html.HiddenField pourrait fonctionner pour votre cas.

Est-ce que je me trompe?

Questions connexes