Tôi mới sử dụng ModelBinders tùy chỉnh, tôi đã tìm kiếm và tôi không thể tìm thấy bất kỳ bài đăng nào liên quan đến trường hợp cụ thể này.MVC 3.0 ModelBinder bindingContext.ValueProvider.GetValue (khóa) trả về null khi liên kết trong bộ sưu tập
Tôi có một thực thể như:
public class DynamicData
{
public IList<DynamicDataItem> DynamicDataItems{get;set;}
}
Trong Xem i ràng buộc nó thích sau:
@Html.EditorFor(model => model.DynamicDataItems);
Tôi có thông tin đặc biệt trong DynamicDataItems lớp, mà tôi muốn lấy trong một cách cụ thể, vì vậy tôi đã tạo ra Binder Model của riêng tôi.
public class DynamicDataItemBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
var key = bindingContext.ModelName;
var valueProviderResult = bindingContext.ValueProvider
.GetValue(key);
if (valueProviderResult == null ||
string.IsNullOrEmpty(valueProviderResult
.AttemptedValue))
{
return null;
}
//Here retrieve my own Information
return DynamicDataItem;
}
}
bindingContext.ModelName chứa "DynamicDataItem [0]".
Nếu tôi thực hiện bindingContext.ValueProvider.ContainsPrefix (khóa), nó trả về true, nhưng khi tôi thực hiện GetValue (khóa), nó trả về giá trị rỗng. Nếu tôi kiểm tra những gì ValueProvider chứa, tôi thấy rằng có một số mục với khóa bắt đầu của họ trong "DynamicDataItem [0]". Làm cách nào để tôi lấy được thông tin từ tất cả các trường cho Hạng mục đang bị ràng buộc hiện tại ("DynamicDataItem [0]")? Tôi có nên truy xuất tất cả từng cái một không? Như sau:
var result1= bindingContext.ValueProvider.GetValue("DynamicDataItem[0].Id");
var result2= bindingContext.ValueProvider.GetValue("DynamicDataItem[0].Name");
Tôi sẽ đánh giá cao bất kỳ hướng dẫn nào bạn có thể cho tôi điều này.
Tôi khuyên bạn nên truy cập [liên kết này] [1]. Tôi nghĩ nó hữu ích cho vấn đề của bạn. [1]: http://stackoverflow.com/a/25902872/1817640 – Jahan