2015-06-07 82 views
-1

模式的選擇值:得到一個列表框

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列表中獲取所有選定的產品。這表現在下面的代碼段

回答

0

最後,我設法使它工作,我會後的解決方案,在任何人的情況下,在未來的需要:

ViewBag.Products = new MultiSelectList(db.Products.Where(p => p.Id != product.Id), "Id", "Name", product.SimilarProducts.Select(p => p.Id)); 

一點解釋:

由於我使用的ListBox,所以我必須使用MultiSelectList,因爲SelectList只識別一個選中的項目,它的參數是:(object selectedValue),已經在MultiSelectList上:(IEnumerable selectedValues),所以我將SelectList更改爲MultiSelectList,並將其添加到我的ActionResult「Edit」中。

0

ListBox控制可具有多個選擇Items(因此,多個不同的值)(再:https://msdn.microsoft.com/en-us/library/system.windows.controls.listbox.selecteditems%28v=vs.110%29.aspx

private void SelectedItems(object sender, RoutedEventArgs e) 
{ 
    if (lb.SelectedItem != null) 
    { 
     label1.Content = "Has " + (lb.SelectedItems.Count.ToString()) + " item(s) selected."; 
    } 
} 

應指定用於在選擇找到項目的業務邏輯(例如,首先在選擇中)。但是,如果選擇模式設置爲Single,則可以使用屬性SelectedItem

希望這可能有所幫助。

+0

嗯,我想你不明白這個問題,我想在「編輯」視圖中顯示,所有產品(被選中的)都是藍色的,默認情況下是這樣的? 「編輯」控制器應該從「SimilarProducts」列表中獲取所有選定的產品。 和DropDownList一樣,當我進入我的編輯視圖時,它會顯示我在創建時選擇的選定值。我希望現在很清楚。 – developer033

+0

答案與您問題的標題相關(「獲取ListBox的選定值」)。請不要將功能規範與有效問題混淆:只需澄清代碼中存在問題的部分,否則它看起來像是代碼寫入服務的請求。感謝和問候, –

+0

我編輯,寫我在這裏寫的所有內容,你不明白什麼?我在這裏寫的標題有什麼不同? 此致敬禮。 – developer033

相關問題