我下面這個Tutorial on ASP.NET MVC,具體在哪裏,它指出提供的"MovieType"
的Razor視圖字符串如下:@Html.DropDownList("MovieType")
將提供關鍵的DropDownList找到在ViewBag
屬性類型爲IEnumerable<SelectListItem>
。ASP.NET MVC的DropDownList值HttpPost
這工作得很好。
但是,我無法獲得用戶在我的方法中使用[HttpPost]
屬性選擇的值。
這是我的代碼和迄今爲止我嘗試過的。
控制器
public class ProductController : Controller
{
private readonly ProductRepository repository = new ProductRepository();
// Get: /Product/Create
public ActionResult Create()
{
var categories = repository.FindAllCategories(false);
var categorySelectListItems = from cat in categories
select new SelectListItem()
{
Text = cat.CategoryName,
Value = cat.Id.ToString()
};
ViewBag.ListItems = categorySelectListItems;
return View();
}
[HttpPost]
public ActionResult Create(Product product)
{
/** The following line is not getting back the selected Category ID **/
var selectedCategoryId = ViewBag.ListItems;
repository.SaveProduct(product);
return RedirectToAction("Index");
}
}
剃刀CSHTML查看
@model Store.Models.Product
<h2>Create a new Product</h2>
@using (@Html.BeginForm())
{
<p>Product Name:</p>
@Html.TextBoxFor(m => m.ProductName)
<p>Price</p>
@Html.TextBoxFor(m => m.Price)
<p>Quantity</p>
@Html.TextBoxFor(m => m.Quantity)
<p>Category</p>
@Html.DropDownList("ListItems")
<p><input type="submit" value="Create New Product"/></p>
}
我試圖與重載玩DropDownList
,但我沒能獲得值回了用戶的選擇。
如果有人看到我失蹤或有任何想法或建議,我將非常感激。謝謝!
更新
發佈Product
模型。請注意,這是在創建.edmx時由Entity Framework自動生成的。
namespace Store.Models
{
using System;
using System.Collections.Generic;
public partial class Product
{
public long Id { get; set; }
public string ProductName { get; set; }
public decimal Price { get; set; }
public int Quantity { get; set; }
public System.DateTime DateAdded { get; set; }
public Nullable<long> CategoryId { get; set; }
public virtual Category Category { get; set; }
}
}
您的產品對象是否有ListItems字段? –
@DaveA Nope。但是,在我的第一個'Create()'方法中,我把它放到'ViewBag'中。我試圖弄清楚是否有一種方法可以將發送回[HttpPost]的屬性的「SelectListItem」下拉列表中的「獲取」。我真的不需要'SelectListItems'在用戶發佈時回來,只需要他們選擇的ID。 –
ListItems是您綁定的變量。你需要ListItems參數或包含作爲參數的對象來操作方法 –