2016-08-01 16 views
0

Ich möchte DropDownList verhindern, einen neuen Wert auszuwählen, aber ich möchte den vorherigen ausgewählten Wert beibehalten, wenn ich beispielsweise Informationen von einem Wert aus der Datenbank ändern möchte. $("#dropDown1").attr("disabled","disabled") aber dies behält nicht den vorherigen Wert und meine Anwendung ist jedes Mal gebrochen, wenn ich auf diese Weise einen Vorschlag versuche?Wie deaktiviert man die Auswahl von DropDownList ASP.NET MVC?

Das ist mein Controller-Methode:

public ActionResult Edit(int? id) 
    { 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 

     IQueryable<InspekcijskaKontrola> inspekcijskeKontrole = db.InspekcijskeKontrole.Include(i => i.InspekcijskaTijela).Include(i => i.Proizvod).Select(i => i); 
     InspekcijskaKontrola inspekcijskaKontrola = inspekcijskeKontrole.Where(i => i.InspekcijskaKontrolaId == id).Select(i => i).Single(); 

     if (inspekcijskaKontrola == null) 
     { 
      return HttpNotFound(); 
     } 
     ViewBag.InspekcijskoTijeloId = new SelectList(db.InspekcijskaTijela, "InspekcijskoTijeloId", "NazivInspekcijskogTijela", inspekcijskaKontrola.InspekcijskoTijeloId); 
     ViewBag.ProizvodId = new SelectList(db.Proizvodi, "ProizvodId", "NazivProizvoda", inspekcijskaKontrola.ProizvodId); 
     return View(inspekcijskaKontrola); 
    } 




[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit([Bind(Include = "InspekcijskaKontrolaId,InspekcijskoTijeloId,ProizvodId,DatumInspekcijskeKontrole,Rezultat,ProizvodSiguran")] InspekcijskaKontrola inspekcijskaKontrola) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Entry(inspekcijskaKontrola).State = EntityState.Modified; 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     ViewBag.InspekcijskoTijeloId = new SelectList(db.InspekcijskaTijela, "InspekcijskoTijeloId", "NazivInspekcijskogTijela", inspekcijskaKontrola.InspekcijskoTijeloId); 
     ViewBag.ProizvodId = new SelectList(db.Proizvodi, "ProizvodId", "NazivProizvoda", inspekcijskaKontrola.ProizvodId); 
     return View(inspekcijskaKontrola); 
    } 

Dies ist, wie ich versuchte, mit .ajax $ Informationen zu ändern, vielleicht sollte ich sagen?

$("#btnSave5").click(function (e) { 
      e.preventDefault(); 
      var form = $(this).closest("form"); 

      $.ajax({ 
       type: "POST", 
       url: form.attr("Edit"), 
       data: form.serialize(), 
       success: function (response) { 

        alert("Informations are successfully changed"); 
        window.location.href = "/InspekcijskeKontrole/Index"; 

       }, 

       error: function (error) { 
        alert(error); 
       } 

      }); 
     }); 
+0

Ist 'dropDown1' die ID Ihres Dropdowns? In diesem Fall ändere deine jquery in '$ (" # dropDown1 "). Attr (" disabled ", true)' – StaticBeagle

+0

Ja, das hat mir gefallen, aber immer noch nichts war ein Fehler, als ich diese Frage trotzdem geschrieben habe. – jhony3

Antwort

1

Dies ist das erwartete Verhalten. Wenn Sie ein Formularelement deaktivieren, wird der Wert beim Übermitteln des Formulars nicht übermittelt.

Wenn Sie das Feld deaktivieren, bedeutet dies, dass der Benutzer den Wert für dieses Feld nicht eingeben soll. In diesem Fall sollten Sie den Wert in Ihrer Aktionsmethode HttpPost festlegen.

Nie einfach auf Client-Seite verlassen. Führen Sie immer serverseitige Validierungen durch. Denken Sie daran, dass Benutzer, selbst wenn Sie ein Formularelement deaktivieren, es mit seinen Browser-Entwicklungstools erneut aktivieren und das Formular senden können.

EDIT: Wie Sie Ihre Kommentare, möchten Sie nicht aktualisieren einen Dropdown-Wert in Ihrer Tabelle beim Aktualisieren eines Datensatzes. In diesem Fall können Sie diese Eigenschaft einfach aus Ihrer Bindung in Ihrer HttpPost-Aktion ausschließen.

Angenommen, Sie möchten den vorhandenen Wert InspekcijskoTijeloId property/column nicht aktualisieren, schließen Sie das nur aus dem Bind aus.

[HttpPost] 
public ActionResult Edit([Bind(Include = "InspekcijskaKontrolaId,ProizvodId, 
    DatumInspekcijskeKontrole,Rezultat, 
    ProizvodSiguran")] InspekcijskaKontrola inspekcijskaKontrola) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Entry(inspekcijskaKontrola).State = EntityState.Modified; 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    ViewBag.InspekcijskoTijeloId = new SelectList(db.InspekcijskaTijela, 
     "InspekcijskoTijeloId", "NazivInspekcijskogTijela", 
      inspekcijskaKontrola.InspekcijskoTijeloId); 
    ViewBag.ProizvodId = new SelectList(db.Proizvodi, 
      "ProizvodId", "NazivProizvoda", inspekcijskaKontrola.ProizvodId); 
    return View(inspekcijskaKontrola); 
} 
+0

Aber wie kann ich den vorherigen Wert setzen, den ich in SessionStorage einstellen kann? – jhony3

+0

Woher bekommen Sie den vorherigen Wert? Wenn es aus Ihrer Db-Tabelle stammt, können Sie es in Ihrer HTTP-Post-Aktion erneut abfragen. Wenn es aus dem vorherigen Formular stammt, können Sie das in einem ausgeblendeten Feld in dem Formular beibehalten. – Shyju

+0

Ja Ich möchte Informationen über den ausgewählten Wert aus meiner Tabelle ändern Ich mache das nie Ich versuche zu deaktivieren aber funktioniert nicht wie du gesagt hast – jhony3

Verwandte Themen