0

我正在将 VS 2010 与 MVC 3 和 EF 5 一起使用。我正在使用一种通用的下拉列表模式,该模式在除一个实例之外的所有实例中都能正常工作,我看不出为什么这个下拉列表未能在选择列表中选择正确的条目。以下是代码片段。

选择列表创建如下:

   public static IEnumerable<SelectListItem> GetOutcomes()
    {
        CodesEntities dataContextCodes = new CodesEntities(ConnectionString);

        return new SelectList(dataContextCodes.CodeOutcome.
            Where(x => x.DisplayOrder > 0).OrderBy(x => x.DisplayOrder), 
            "OutcomeCodeID", "Outcome");
    }

这将返回正确的选择列表。

该视图具有以下代码:

@Html.DropDownListFor(m => m.OutcomeCodeID,
                PerintalFormViewModels.GetOutcomes(), "Please select an item")

模型值m.OutcomeCodeID具有有效值 (1),但未选择任何项目。

生成的 HTML 是:

<select id="CodeID" name="OutcomeCodeID" data-val-required="Outcome is required" data-val-number="The field outcome must be a number." data-val="true">
<option value="">Please select an item</option>
<option value="1">Termination</option>
<option value="2">Loss</option>
<option value="3">Still</option>
<option value="4">Live</option>
</select>

我正处于头发撕裂,被逼疯的阶段。有人有想法吗?

谢谢

4

2 回答 2

1

你可以这样做:

public static IEnumerable<SelectListItem> GetOutcomes(string selectedID)
{
    CodesEntities dataContextCodes = new CodesEntities(ConnectionString);


    return new SelectList(dataContextCodes.CodeOutcome.
        Where(x => x.DisplayOrder > 0).OrderBy(x => x.DisplayOrder), 
        "OutcomeCodeID", "Outcome"
        , selectedID); // add this parameter
}

或这个:

public static IEnumerable<SelectListItem> GetOutcomes(string selectedID)
{
    CodesEntities dataContextCodes = new CodesEntities(ConnectionString);


    return        
      dataContextCodes.CodeOutCome
      .Where(x => x.DisplayOrder > 0)
      .OrderBy(x => x.DisplayOrder)
      .ToList()
      .Select(x => new SelectListItem 
      { 
          Value = x.OutcomeCodeID.ToString(),
          Text = x.Outcome.ToString(),
          Selected = x.OutcomeCodeID == selectedID
      });
}

然后像这样调用它:

@Html.DropDownListFor(m => m.OutcomeCodeID,
            PerintalFormViewModels.GetOutcomes(Model.OutcomeCodeID), 
            "Please select an item")
于 2012-11-20T15:36:42.930 回答
0

您没有在任何地方设置默认选定值。

您用于 SelectList 的特定构造函数是这个:

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

其中不设置默认值。要么你使用这个:

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

并指定selectedValue或者您在要选择的项目上手动将 SelectedListItem 的 Selected 属性设置为 true (http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlistitem(v=vs.108 ).aspx)。

这是一个无耻的插件,但我仍然认为它是一个很好的资源:http ://blinkingcaret.wordpress.com/2012/08/11/using-html-dropdownlistfor/

于 2012-11-20T15:35:12.573 回答