在SelectList

时间:2016-09-09 05:02:34

标签: c# asp.net-mvc razor selectlist

我正在尝试更改dropDownList的SelectList构造函数中的默认选择,selectList构造函数允许第三个参数,该参数是表示selectList的DataTextField值的字符串,但是当我尝试以下任一操作时:

new SelectList(new[] { 1, 2, 3, 4 }, Model.XXXX.xxxx, 3)
new SelectList(new[] { 1, 2, 3, 4 }, Model.XXXX.xxxx, "3")

我收到错误:

  

“最好的重载方法匹配有一些无效的参数”

我不理解什么?在我看来,上面的第二行应该工作,因为我给它第三个String参数显示在DataTextField中。

作为次要问题,语法是什么

new[] { 1, 2, 3, 4 }

意思?我不熟悉C#和新关键字之后的括号。

3 个答案:

答案 0 :(得分:1)

SelectList sl = new SelectList( new[]{
  new SelectListItem{ Text="one", Value="1"},
  new SelectListItem{ Text="two", Value="2"},
  new SelectListItem{ Text="three", Value="3"}
}, "Text", "Value", "3" );

关于你的另一个问题,

  

new [] {1,2,3,4}

你基本上是在创建一个int数据类型数组,其元素为1,2,3和4

答案 1 :(得分:1)

SelectList构造函数的一个重载是以下

SelectList(IEnumerable, String, String);

IEnumerable - >列表的项目

字符串 - >数据值字段

字符串 - >数据文本字段

你IEnumerable是new[] { 1, 2, 3, 4 },它基本上是一个整数数组,其元素为1,2,3和4。

数据值字段是您的模型,文本字段是" 3"。

如果您尝试从其中一个模型创建选择列表,我建议您执行以下操作

new SelectList(Model, "Data Value field", "Data text field");

例如: 如果您有学生模型(Std_ID,Std_Name),则需要一个选择列表来显示学生姓名并保留其ID的值

new SelectList(Model, "Std_ID", "Std_Name");

答案 2 :(得分:0)

您用于SelectList的构造函数

public SelectList(
    IEnumerable items,
    string dataValueField,
    string dataTextField
)

MSDN

当通过View呈现SelectList时,它只是HTML,因此您应该将匿名数组作为字符串,dataValueField和dataTextField也作为字符串提供。 看看这个上下文



 <select>
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="2">3</option>
      <option value="2">4</option>
  </select>
&#13;
&#13;
&#13;

更改以下代码

new SelectList(new[] { "1", "2", "3", "4" }, Model.XXXX.xxxx, "3")

Model.XXXX.xxxx 将其更改为您的数据值字段。

new[] { 1, 2, 3, 4 } // anonymous type by using the new operator with an object initializer. here this anonymous array is int type.

MSDN

希望它有所帮助。