如何禁用DropDownList ASP.NET MVC的选择?

时间:2016-08-01 15:36:44

标签: jquery asp.net-mvc

我想阻止DropDownList选择新值,但我希望保留以前选择的值,例如当我想要从数据库中更改某些值的信息时,我尝试了这样byte[] imageStream = LoadImage("myapplication.image.png"); string imageFilename = MigraDocFilenameFromByteArray(imageStream); Image image = para.AddImage(imageFilename); 但这不保留以前的值每当我尝试这种方式的任何建议时,价值和我的申请都会被打破?

这是我的控制器方法:

$("#dropDown1").attr("disabled","disabled")

这是我试图用$ .ajax改变信息的方式,也许我应该使用PUT?

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

1 个答案:

答案 0 :(得分:1)

这是预期的行为。如果禁用表单元素,则在提交表单时,将不会提交该值。

如果禁用该字段,则表示您不希望用户输入此字段的值,在这种情况下,您应该在HttpPost操作方法中设置该值。

绝不仅仅依靠客户端。始终进行服务器端验证。请记住,即使您禁用表单元素,用户也可以使用他的浏览器开发工具重新启用它并提交表单。

编辑:根据您的评论,您不希望在更新记录时更新表格中的一个下拉列表值。在这种情况下,您可以在HttpPost操作中从Bind中排除该属性。

假设您不想更新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);
}