我正在关注ASP.NET MVC 上的本教程,特别是其中指出将 String of 提供"MovieType"
给 Razor 视图如下:@Html.DropDownList("MovieType")
将提供DropDownListViewBag
的密钥以在of 类型中查找属性IEnumerable<SelectListItem>
。
这工作得很好。
但是,我无法使用[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 时由实体框架自动生成的。
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; }
}
}