如何使用Int Value创建SelectListItem()

时间:2014-07-28 16:42:50

标签: c# asp.net-mvc asp.net-mvc-5

我的asp.net mvc操作方法中有以下代码: -

var CustomerData = customerlist.Select(m => new SelectListItem()
            {
                Text = m.SDOrganization.NAME,
                Value = m.SDOrganization.ORG_ID.ToString(),

            });

目前如果我从ORG_ID中删除ToString(),我将收到“无法显式将long转换为字符串”的错误。所以我似乎必须将SelectListItem的值和文本定义为字符串。但是由于SelectListItem应该保持很长时间,所以有没有办法传递SelectListItem的值而不是字符串?

1 个答案:

答案 0 :(得分:14)

  

...那么有没有办法传递SelectListItem的值而不是字符串?

没有。这样做是没有任何意义的,因为它只是呈现时,它只是没有long概念的HTML。

如果我们有行动

public ActionResult Test()
{
    var dictionary = new Dictionary<int, string>
    {
        { 1, "One" },
        { 2, "Two" },
        { 3, "Three" }
    };

    ViewBag.SelectList = new SelectList(dictionary, "Key", "Value");

    return this.View();
}

和以下视图&#34; Test.cshtml&#34;:

@using (Html.BeginForm())
{
    @Html.DropDownList("id", ((SelectList)ViewBag.SelectList), "All")
    <input type="submit" value="Go" />
}

生成的HTML是

<form action="/home/test" method="post">
  <select id="id" name="id">
    <option value="">All</option>
    <option value="1">One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
  </select>    
  <input type="submit" value="Go">
</form>

当我们发布此动作时,您的号码文本会被Model Binder有效地解析回您想要的类型

[HttpPost]
public ActionResult Test(int? id)
{
    var selectedValue = id.HasValue ? id.ToString() : "All";

    return Content(String.Format("You selected '{0}'", selectedValue));
}

以上工作正如您所料。