Ich habe Dropdown-Box in meiner Ansicht, die von der SQL-Datenbank-Tabelle gefüllt ist. Im Drop-Down-Menü habe ich verschiedene Werte, ich möchte den ausgewählten Wert des Dropdown-Menüs bei Klick auf die Controller-Aktionsmethode übergeben. Hier ist, wie Drop-Down gefüllt ist.Wie übergibt man den ausgewählten Wert der Dropdown-Box von einer MVC-Ansicht an die Controller-Aktionsmethode?
public ViewResult ProductDetails(int productId)
{
Product product = repository.Products
.Include(p => p.Reviews)
.FirstOrDefault(p => p.ProductID == productId);
List<string> available = new List<string>();
available.AddRange(product.AvailableSizes.Split(',').ToList());
ViewData["AV"] = new SelectList(available);
return View(product);
}
und dann in der Ansicht:
@Html.DropDownList("AV")
meine Controller-Aktion Methode ist:
public ActionResult AddToCart(Cart cart, int productId, string returnUrl, string size)
{
Product product = repository.Products
.FirstOrDefault(p => p.ProductID == productId);
if (product != null)
{
cart.AddItem(product, 1,size); //no overload for method 'AddItem' takes 3 argument, Error!
}
return RedirectToAction("Index", new { returnUrl });
}
und schließlich die Karre Klasse ist unten:
public void AddItem (Product product, int quantity)
{
CartLine line = lineCollection
.Where(p => p.Product.ProductID == product.ProductID)
.FirstOrDefault();
if (line == null)
{
lineCollection.Add(new CartLine { Product = product, Quantity = quantity });
}
else
{
line.Quantity += quantity;
}
}
ich versuchte, Error with the ajax and transaction in mvc hatte aber keine Glück, irgendeine Idee?
Bearbeiten für Sir Rion Williams: Die gesamte Wagenklasse ist unten für Ihre weitere Informationen.
public class Cart
{
private List<CartLine> lineCollection = new List<CartLine>();
public void AddItem (Product product, int quantity)
{
CartLine line = lineCollection
.Where(p => p.Product.ProductID == product.ProductID)
.FirstOrDefault();
if (line == null)
{
lineCollection.Add(new CartLine { Product = product, Quantity = quantity });
}
else
{
line.Quantity += quantity;
}
}
public void RemoveLine (Product product)
{
lineCollection.RemoveAll(l => l.Product.ProductID == product.ProductID);
}
public decimal ComputeTotalValue()
{
return lineCollection.Sum(e => e.Product.ProductPrice * e.Quantity);
}
public void Clear()
{
lineCollection.Clear();
}
public IEnumerable<CartLine> Lines
{
get { return lineCollection; }
}
public class CartLine
{
public Product Product { get; set; }
public int Quantity { get; set; }
}
}
Rion dank für das, aber ist es möglich, es ein wenig klar wie weit zu machen, wie ich bin ganz neu zu mvc ? Ich habe keine Eigenschaft namens AV und weder einen Parameter, was raten Sie? –
Nun die einfachste Sache, einfach zu überprüfen, ob Ihr Wert veröffentlicht wird oder nicht, ist, dass Sie eine Zeile innerhalb Ihrer Add-to-Cart-Methode hinzufügen können, um den 'AV'-Wert wie folgt zu überprüfen:' var selected = Request ["AV" ]; '. Sie können den Debugger verwenden, um festzustellen, ob dieser Wert korrekt ausgefüllt wird, und ihn dann nach Bedarf zu verwenden. Alternativ könnten Sie den Ansatz, den ich bereits erwähnt habe, verwenden, um der Aktion namens AV einen Parameter hinzuzufügen, und MVC würde den Wert selbständig binden. –
Sir Williams, bitte schauen Sie sich meine Frage nochmal an. Der Parameter 'Größe', den ich in meiner Aktionsmethode übergeben habe, zeigt einen Fehler und der Fehler ist in der Frage geschrieben. Vielen Dank nochmal –