【问题标题】:Using AngularJS with MVC SelectList has no value initially selected使用带有 MVC SelectList 的 AngularJS 最初没有选择任何值
【发布时间】:2015-06-22 09:10:57
【问题描述】:

我有一个类,它有一个 MVC SelectList 和一个指示所选值的 int。

public class SampleClass {
      public SelectList ServicesAvailable {get; set;}
      public int ServiceIdSelected {get; set;}

      public SampleClass() {}
}

当您进入页面编辑项目时,您希望之前选择的项目会被选中。使用 razor @Html.DropDownListFor(...) 绝对可以。但是,此页面使用的是 Angular,所以我使用的是:

<select style="width:40%;" chosen data-placeholder="Select a method" 
     no-results-text="'No service found'" ng-model="ServiceIdSelected" 
     ng-options="item.Value as item.Text for item in ServicesAvailable">
        <option value=""></option>
</select>

使用这个 Angular 注释,永远不会选择初始项目。我只能认为这是因为 MVC SelectList 的 Value 和 Text 属性都是字符串,并且 Angular 在后台执行类似 ServiceIdSelected === item.Value 的操作,因为一个是字符串,另一个是 int 它是总是假的。

还有其他人遇到过这个问题吗?如果是这样,你是如何绕过它的?将 SelectList 属性更改为 List 的东西是我唯一的选择吗?

【问题讨论】:

    标签: asp.net-mvc angularjs razor


    【解决方案1】:

    你可以看看这个小提琴也许这对你有帮助。

    <select 
                ng-model="Choice.SelectedOption"                 
                ng-options="choice.Name for choice in Choice.Options track by choice.ID"></select>
    

    Fiddle for select

    克里斯托弗干杯,

    【讨论】:

    • 嗯,所以我可以使用 object ,而不是在模型中使用整数。因此,要在 post 上映射回视图模型,它必须是一个 SelectListItem。
    • 所以,我所做的是使用一个字符串作为 ServiceIdSelected,因为服务上有一个唯一的字符串属性。无需尝试发布额外的对象并保持简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    相关资源
    最近更新 更多