我有一个带有VideModel的ASP.NET MVC控制器,我将其序列化为JSON并发送到客户端,同时使用AngularJS将这两者结合在一起。视图模型具有绑定到Select元素的lookup(数组)。一切正常,我可以选择一个值,将表单发布回MVC控制器并在那里获取所选值。
当我发回一个已选择值的视图模型时,未在Select元素中选择该值。我可以看到在客户端(使用Batarang)正确设置了值,但Select仍未显示为已选中。 Here是显示此内容的示例的链接。有任何想法吗?
这里是代码片段,为您提供一些想法(角度控制器没有任何代码,只是将具有默认值的新项目添加到目标数组的意思)。
MVC控制器:
public Sources {
First,
Second,
Third
}
public ActionResult MyGetAction()
{
var vm = new MyViewModel {
Sources = SelectListExtension.ToSelectListItem<Sources>() //Would return IEnumerable<SelectListItem> (with proper Value and Text for all enum entries)
Destination = new List<DestinationViewModel>(); //Has int? SourceId
};
vm.ClientData = SerializeToJson(vm);
return View(vm);
}
[HttpPost]
public ActionResult MyPostAction(MyViewModel model)
{
var selectedSource = model.Destination[0].SourceId; //works fine
model.Sources = SelectListExtension.ToSelectListItem<Sources>(); //populate the lookup again
//model still has 1 destination with the SourceId correctly set
return View(model);
}
My View绑定到JSON对象:
@using (Html.BeginForm())
{
<div ng-repeat="destination in Destinations">
<select ng-init="destination.Source = { Value: destination.SourceId }"
ng-model="destination.Source"
ng-options="s.Text for s in Source track by s.Value"
ng-change="destination.SourceId = destination.Source.Value"
name="Destinations[{{$index}}].SourceId"
id="Destinations_{{$index}}__SourceId">
<option value=""></option>
</select>
</div>
<input type="submit">
}