2016-08-01 129 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

'dropDown1'是您的下拉列表的ID嗎?在這種情況下,改變你的jquery到'$(「#dropDown1」)。attr(「disabled」,true)' – StaticBeagle

+0

是的,我確實喜歡,但仍然沒有錯,當我寫這個問題thx無論如何。 – jhony3

回答

1

這是預期的行爲。如果您禁用表單元素,則當您提交表單時,該值將不會被提交。

如果您禁用該字段,這意味着您不希望用戶輸入此字段的值,那麼應該在HttpPost操作方法中設置該值。

絕不僅僅依靠客戶端。始終做服務器端驗證。請記住,即使您禁用表單元素,用戶也可以使用瀏覽器開發工具重新啓用表單並提交表單。

編輯:根據您的意見,您不希望在更新記錄時更新表格中的一個下拉值。在這種情況下,您可以簡單地將您的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

你從哪裏得到以前的價值?如果它來自你的數據庫表,你可以在http post動作中再次查詢它。如果它來自以前的表單,則可以將其保留在表單中的隱藏字段中。 – Shyju

+0

是的我想改變我的表中選定的值的信息我從來沒有這樣做我試圖禁用,但不像你說的那樣工作 – jhony3

相關問題