2016-08-01 20 views
0

DropDownListが新しい値を選択しないようにしたいのですが、データベースからいくつかの値の情報を変更したいときなど、前回選択した値を保持したい場合$("#dropDown1").attr("disabled","disabled")のようにしましたが、これは以前の値を保持せず、私はこのように何か提案をしようとするたびに壊れていますか?DropDownList ASP.NET MVCの選択を無効にするにはどうすればよいですか?

これは私のコントローラのメソッドです:

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); 
    } 

これは、私は多分、私がPUT使うべき$アヤックスとの情報を変更しようとした方法ですか?

$("#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

ドロップダウンのIDは 'dropDown1'ですか?その場合、jqueryを '$("#dropDown1 ")に変更してください。attr(" disabled "、true)' – StaticBeagle

+0

はい、私はそれを好きでしたが、とにかくこの質問を書いたときに間違いはありませんでした。 – jhony3

答えて

1

これは予期された動作です。フォーム要素を無効にした場合、フォームを送信すると、値は送信されません。

フィールドを無効にする場合は、ユーザーがこのフィールドの値を入力する必要がないことを意味します。この場合、HttpPostアクションメソッドで値を設定する必要があります。

クライアント側には決して依存しないでください。常にサーバー側の検証を行う。フォーム要素を無効にしても、ユーザーはブラウザの開発ツールを使用してフォーム要素を再度有効にしてフォームを送信できます。

編集:あなたのコメントによれば、レコードを更新するときにテーブルのドロップダウン値を1つ更新したくない。その場合、HttpPostアクションのバインドからそのプロパティを単に除外することができます。

既存の値InspekcijskoTijeloIdのプロパティ/列を更新したくないと仮定して、バインドからその値を除外します。

[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

しかし、以前の値を設定するにはどうすればsessionStorageで設定できますか? – jhony3

+0

どこから以前の値を取得しますか?それがあなたのdbテーブルからのものであれば、あなたのhttp postアクションでそれを再度照会することができます。以前のフォームの場合は、フォームの非表示フィールドにそのフォームを保持することができます。 – Shyju

+0

はい私のテーブルから選択した値に関する情報を変更したい私はこれを行うことはありません私は無効にしようとしたが、あなたが言ったように動作しません – jhony3

関連する問題