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

相关问题