我試圖讓編輯視圖與ASP MVC 5中的DropDownListFor工作,但無論我選擇什麼,發佈的值仍然是舊的。我覺得很奇怪,因爲最初選定的項目是實際的模型值。這適用於我在頁面上使用的DropDownListFor元素。DropDownListFor不綁定編輯帖
此外,相同的邏輯工作在相同控制器的創建視圖。
模型屬性:
public List<ProizvodjacViewModel> VendorList { get; set; }
public List<KategorijaViewModel> CategoryList { get; set; }
視圖元素:
<div class="form-group">
@Html.LabelFor(model => model.ProizvodjacID, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.ProizvodjacID, new SelectList(Model.VendorList, "ID", "Naziv"))
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.KategorijaId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.KategorijaId, new SelectList(Model.CategoryList, "ID", "Naziv"))
</div>
</div>
控制器並不重要,因爲發佈到它的值是本來就不好。
我沒發現的是,在所生成的創建視圖,HTML只是一個簡單的列表:
<select data-val="true" data-val-number="The field ProizvodjacID must be a number." data-val-required="The ProizvodjacID field is required." id="ProizvodjacID" name="ProizvodjacID" aria-required="true" aria-describedby="ProizvodjacID-error" class="valid" aria-invalid="false">
<option value="1">Gibson</option>
<option value="2">Hohner</option>
<option value="3">Yamaha</option>
</select>
但在編輯視圖中,也產生了selected
屬性:
<select id="ProizvodjacID" name="ProizvodjacID" aria-required="true" aria-describedby="ProizvodjacID-error" class="valid" aria-invalid="false">
<option selected="selected" value="1">Gibson</option>
<option value="2">Hohner</option>
<option value="3">Yamaha</option>
</select>
控制器方法:
// GET: Proizvod/Edit/5
[HttpGet]
[ActionName("Edit")]
public ActionResult EditGet(int id)
{
ViewBag.Err = "";
ProizvodViewModel p = new ProizvodViewModel()
{
ID = id,
Naziv = "",
NazivProizvodjaca = "",
CenaOd = 0,
CenaDo = Int32.MaxValue
};
//goes to DB and gets a product(Proizvod) by id
DataSet ds = DAL.ProizvodDAL.Pretraga(p);
DataRow dr = ds.Tables[0].Rows[0];
p.Naziv = dr["NAZIV"].ToString();
p.Cena = Convert.ToDecimal(dr["CENA"]);
p.SlikaUrl = dr["SLIKA_URL"].ToString();
p.ProizvodjacID = Convert.ToInt32(dr["PROIZVODJAC_ID"]);
p.NazivProizvodjaca = dr["NAZIV_PROIZVODJACA"].ToString();
p.KategorijaId = Convert.ToInt32(dr["KATEGORIJA_ID"]);
//populates VendorList from DB -- code below
popuniProizvodjace(p);
//same, but with CategoryList -- code below
popuniKategorije(p);
return View(p);
}
// POST: Proizvod/Edit/5
[HttpPost]
[ActionName("Edit")]
public ActionResult EditPost(ProizvodViewModel proizvod)
{
try
{
// TODO: Add update logic here
if (ModelState.IsValid)
{
if (proizvod.ListaKategorija == null)
popuniKategorije(proizvod);
if (proizvod.ListaProizvodjaca == null)
popuniProizvodjace(proizvod);
int rezultat = 1;
string poruka;
//updates the product in DB
DAL.ProizvodDAL.Izmena(proizvod, out rezultat, out poruka);
if (rezultat != 0)
{
ViewBag.Err = poruka;
return View(proizvod);
}
return RedirectToAction("Index");
}
else
{
return View(proizvod);
}
}
catch (Exception ex)
{
ViewBag.Err = ex.Message;
return View(proizvod);
}
}
private void popuniProizvodjace(ProizvodViewModel proizvod)
{
// gets all vendors (Proizvodjac) from DB
DataSet ds = DAL.ProizvodjacDAL.Pretraga(new ProizvodjacViewModel() { Naziv = "", ID = 0 });
if (AetFunkcije.proveriDataSet(ds))
{
proizvod.VendorList = new List<ProizvodjacViewModel>();
foreach (DataRow dr in ds.Tables[0].Rows)
{
proizvod.VendorList.Add(new ProizvodjacViewModel() { ID = Convert.ToInt32(dr["PROIZVODJAC_ID"]), Naziv = dr["NAZIV"].ToString() });
}
}
}
private void popuniKategorije(ProizvodViewModel proizvod)
{
// gets all categories (Kategorija) from DB
DataSet ds = DAL.KategorijaDAL.Pretraga(new KategorijaViewModel() { ID = 0, Naziv = "" });
if (AetFunkcije.proveriDataSet(ds))
{
proizvod.ListaKategorija = new List<KategorijaViewModel>();
foreach (DataRow dr in ds.Tables[0].Rows)
{
proizvod.CategoryList.Add(new KategorijaViewModel() { ID = Convert.ToInt32(dr["KATEGORIJA_ID"]), Naziv = dr["NAZIV"].ToString() });
}
}
}
有什麼建議?
「但在編輯看來,[...]」:這就是你如何在HT中設定初始值ML下拉(即。 'select'元素),反映在編輯現有值時應顯示。 – Richard
看起來像兩個下拉的ID是一樣的。 – Prajwal
@Richard但我從來沒有明確設置初始值...模型綁定做到了。那麼爲什麼當我選擇別的東西時,它會保持這種狀態? – dzenesiz