如果给定相应的int“Value”,如何从SelectList返回SelectListItem中的“Text”?

时间:2012-08-29 11:20:58

标签: c# asp.net-mvc asp.net-mvc-3 http-post selectlist

我看起来像SelectList。 。

new SelectList(new[]
    {
        new { Value = "1", Text = "AK" },
        new { Value = "2", Text = "AL" },
        new { Value = "3", Text = "AR" },
        new { Value = "4", Text = "AZ" },
        etc. . . 

给定一个int,我需要能够选择相应的Value,以便我可以返回关联的Text。所以,如果我有int 3,我想最终返回字符串“AR” - 我该怎么做?

我似乎不明白SelectLists是如何工作的,我一直在尝试这样的事情:

var stringValue = mySelectList.Where(m => m.Value == myInt).Text;  

- 由于以下几个原因,这不起作用:

  • 。文本不是我可以在请求结束时放置的,因为它无法解决
  • m.Value - myInt告诉我I cannot convert the source type 'int' to target type 'string',如果我将int更改为字符串,则会收到错误:cannot convert expression type 'string' to return type 'bool'

我觉得我在这里过于复杂。我哪里出错了?

4 个答案:

答案 0 :(得分:2)

你也可以使用这样的东西

    var stringValue = mySelectList.Find(match => match.Value == myInt.ToString()).Text;

由于Find返回列表中找到的第一个匹配项。

您的代码无效的另一件事因为您在比较中只键入一个“=”,它应该像“==” 您的:

mySelectList.Where(m => m.Value = myInt).Text
喜欢它应该是:

mySelectList.Where(m => m.Value == myInt).Text

答案 1 :(得分:1)

你可能需要这样的东西:

var stringValue = mySelectList.Where(m => m.Value == myInt.ToString())
                              .First()
                              .Text; 
  • Where方法不返回SelectListItem,它返回一个查询。您需要强制执行查询,并使用First()方法获得第一个结果。
  • 您正在使用=(分配值)而不是==(比较两个值)。

答案 2 :(得分:1)

这样做;

 mySelectList.First(m => m.Value == myInt.ToString()).Text

答案 3 :(得分:0)

var lst = mySelectList.Where(o=> o.Value ==myInt.ToString()).Select(o=> o.Text).First();