एक कस्टम मॉडल बांधने की मशीन यह दिखाई देता है:
public ActionResult Grid(int start, int limit, string sort, ExtFilterInfo[] filter)
QueryString इस तरह दिखता है:
public class ExtFilterInfo
{
public string Field { get; set; }
public ExtFilterData Data { get; set; }
}
public class ExtFilterData
{
public string Type { get; set; }
public string Value { get; set; }
}
यहाँ कार्रवाई है:
मैं इन सहायक वर्गों लिखा था बिल फिट कर सकता है:
public class ExtFilterInfoModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var filter = (ExtFilterInfo)base.BindModel(controllerContext, bindingContext);
var field = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + "[field]");
if (field != null)
{
filter.Field = field.AttemptedValue;
}
var type = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + "[data][type]");
if (type != null)
{
if (filter.Data == null)
{
filter.Data = new ExtFilterData();
}
filter.Data.Type = type.AttemptedValue;
}
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + "[data][value]");
if (value != null)
{
if (filter.Data == null)
{
filter.Data = new ExtFilterData();
}
filter.Data.Value = value.AttemptedValue;
}
return filter;
}
}
जो Application_Start
में पंजीकृत किया जा सकता है:
ModelBinders.Binders.Add(typeof(ExtFilterInfo), new ExtFilterInfoModelBinder());
और अब filter
संग्रह जो अपने नियंत्रक कार्रवाई तर्क के रूप में लेता है सही ढंग से बाध्य किया जाना चाहिए।
स्रोत
2011-05-31 06:36:16