从@html.DropDownList返回int值

5

实际上,由于我在ASP.NET-MVC 4方面的知识不足,遇到了一些问题。 我所尝试做的是从下拉框中获取选定的值并将其返回给控制器(类型为整数)。 让我更困惑的是,其他返回字符串值的DropDownList却能正常工作。

我的模型:

public partial class PRODUCT
{
    public int ID { get; set; }
    public string PRODUCT_NAME { get; set; }
    public int CATEGORY_ID { get; set; }
    public string LANGUAGE { get; set; }
}

public partial class PRODUCT_CATEGORY
{
    public int ID { get; set; }
    public string CATEGORY_NAME { get; set; }
    public string LANGUAGE { get; set; }
}

我的控制器: //填充ViewBag

ListProductCategory = new List<PRODUCT_CATEGORY>();
ListProductCategory = db.PRODUCT_CATEGORY.ToList();

IList<PRODUCT_CATEGORY> prodCategories = db.PRODUCT_CATEGORY.ToList();
IEnumerable<SelectListItem> selectListCategory =
     from c in prodCategories
     select new SelectListItem
     {
      Text = c.CATEGORY_NAME,
       Value = c.ID.ToString()
     };

ViewBag.ProductCategoryData = selectListCategory;

//创建动作

[HttpPost]
public ActionResult Create(PRODUCT product)
{
    if (ModelState.IsValid)
    {
        db.PRODUCTs.Add(product);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(product);
}

我的观点:

<div class="editor-label">
        @Html.LabelFor(model => model.CATEGORY_ID)
 </div>

 <div class="editor-field">            
   @Html.DropDownList("ProductCategories", new  SelectList(ViewBag.ProductCategoryData, "Value", "Text"))          
   @Html.ValidationMessageFor(model => model.CATEGORY_ID)
 </div>

下拉列表已填充,但ProductCategories的值未返回,而是返回0而非实际值。
请帮忙解决。
2个回答

2

还有哪些下拉列表返回字符串?我打赌它们返回的字符串是模型的一部分。您的模型没有 ProductCategories 属性。尝试更改为:

@Html.DropDownList("ProductCategories", new  SelectList(ViewBag.ProductCategoryData, "Value", "Text"))          

To:

@Html.DropDownList("CATEGORY_ID", new  SelectList(ViewBag.ProductCategoryData, "Value", "Text"))          

它已经可以工作了!非常感谢。一开始我以为第一个参数中的名称仅供参考,所以我只是随意填写。看来在ASP.NET方面我还有很长的路要走。再次感谢你的帮助。 :-) - anevil

1

尝试一下

在你的模型中添加额外的属性

public partial class PRODUCT
{
    public int ID { get; set; }
    public string PRODUCT_NAME { get; set; }
    public int CATEGORY_ID { get; set; }
    public string LANGUAGE { get; set; }
    **public int SelectedCATEGORY_ID { get; set; }**
}


@Html.DropDownListFor(**model=>model.SelectedCATEGORY_ID** , new  SelectList(ViewBag.ProductCategoryData, "Value", "Text"))  

现在您可以在SelectedCATEGORY_ID属性中获取下拉列表的选定值。

或者

 @Html.DropDownListFor(**model=>model.CATEGORY_ID ** , new  SelectList(ViewBag.ProductCategoryData, "Value", "Text"))  


    Now you can get the dropdown selected value in the CATEGORY_ID property .

模型已更新并且HtmlDropDownList已修改,但是在应用Html部分时出现了错误,提示“无法将lambda表达式转换为类型'string',因为它不是委托类型”。我需要改变其他什么吗? - anevil
1
将 DropDownList 更改为 DropDownListFor。 - user1193035

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接