2009-07-22 7 views
0

Ich habe einen UserController und eine Edit.aspx. Es gibt ein Feld, das mein Primärschlüssel ist, also möchte ich Benutzern nicht erlauben, dieses Feld zu bearbeiten.asp.net-mvc/linq to sql - brauche ich immer eine HTML.TextBox um eine Edit Save zu machen?

Das Problem ist, dass wenn ich die

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

dann

entfernen, wenn die asp.net-mvc magischen Codes meines Controller ruft:

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

das E-Mail-Feld des tblMailingList null ist. Das Problem ist, dass ich dies als Nachschlagen in der Tabelle brauche, um den aktuellen Datensatz abzurufen, und natürlich, wenn es null ist, bekomme ich eine Ausnahme.

Wenn ich die Textbox für dieses Feld zurücksetze, funktioniert es gut. Es scheint verrückt zu sein, dass ich eine Textbox haben müsste und das Bearbeiten erlauben würde, dieses Feld an den Controller zu übergeben. Ich habe versucht, es in ein Etikett zu setzen, und es zeigt sich immer noch als Null im Controller.

irgendwelche Vorschläge?

Antwort

3

Meine erste Frage wäre, warum machst du die Suche auf dem E-Mail-Feld und nicht das Id-Feld?

Sie können in Ihrer Formular-Deklaration Parameter übergeben, die an Ihren Controller weitergeleitet werden.

<% using (Html.BeginForm(
    "MethodName", "Controller", FormMethod.Post, 
    new { id = Model.Id, email = Model.Email)) { %> 

Ich bin mir nicht sicher, ob ich die Methodendeklaration richtig gelesen habe, bitte überprüfen Sie.

Ich würde empfehlen, etwas anders zu aktualisieren, da Ihr tblMailingList-Benutzer nicht gültig sein wird, in Ihrem Repository aktualisiert zu werden.

[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

Wenn Sie nur ein Feld möchten, das an den Controller übergeben werden kann, das im Formular unsichtbar sein muss, könnte Html.HiddenField für Ihren Fall funktionieren.

Komme ich falsch?

Verwandte Themen