模式的選擇值:得到一個列表框
public virtual ICollection<Product> OriginalProducts { get; set; }
public virtual ICollection<Product> SimilarProducts { get; set; }
視圖(創建和編輯相等):
<div id="divSimilar" class="form-group">
@Html.Label("Similar Products", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.ListBox("Products", null, htmlAttributes: new { @class = "form-control" })
</div>
</div>
控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "MyAttributes")] Product product)
{
if (ModelState.IsValid)
{
db.Products.Add(product);
List<string> selectedSimilars = Request.Form.GetValues("Products").ToList();
foreach (string Id in selectedSimilars)
{
Product similarProd = db.Products.Find(System.Convert.ToInt32(Id));
if (similarProd != null)
product.SimilarProducts.Add(similarProd);
}
db.SaveChanges();
return RedirectToAction("Index").Success("Successfully created");
}
ViewBag.Products = new SelectList(db.Products, "Id", "Name", product.SimilarProducts);
return View(product);
}
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Product product = db.Products.Find(id);
if (product == null)
{
return HttpNotFound();
}
ViewBag.Products = new SelectList(db.Products.Where(p => p.Id != product.Id), "Id", "Name", product.SimilarProducts);
return View(product);
}
所以,既然 「創建」 部分工作正常,我想知道如何在我的「編輯」視圖中獲取所有選定的SimilarProducts(我在「創建」中添加的)。控制器需要進行哪些更改才能使其工作?
順便說一句,因爲我使用ListBox,我認爲DropDownList有一個不同的方式,因爲我用這種方式來處理所有的DropDownLists,並且工作正常。
編輯
我想顯示「編輯」視圖中,藍色(當我創建的產品中選定)的所有產品。換句話說,ActionResult「Edit」應該像DropDownList一樣從SimilarProducts列表中獲取所有選定的產品。這表現在下面的代碼段
嗯,我想你不明白這個問題,我想在「編輯」視圖中顯示,所有產品(被選中的)都是藍色的,默認情況下是這樣的? 「編輯」控制器應該從「SimilarProducts」列表中獲取所有選定的產品。 和DropDownList一樣,當我進入我的編輯視圖時,它會顯示我在創建時選擇的選定值。我希望現在很清楚。 – developer033
答案與您問題的標題相關(「獲取ListBox的選定值」)。請不要將功能規範與有效問題混淆:只需澄清代碼中存在問題的部分,否則它看起來像是代碼寫入服務的請求。感謝和問候, –
我編輯,寫我在這裏寫的所有內容,你不明白什麼?我在這裏寫的標題有什麼不同? 此致敬禮。 – developer033