2011-05-31 5 views
5

एएसजेनेट एमवीसी एक्शन पैरामीटर को एक्स्टजेस 4 ग्रिड फ़िल्टर जानकारी को बांधने का सबसे अच्छा तरीका क्या है?एएसजेनेट एमवीसी एक्शन पैरामीटर को एक्स्टजेस 4 ग्रिड फ़िल्टर जानकारी को बांधने का सबसे अच्छा तरीका क्या है?

_dc:1306799668564 
filter%5B0%5D%5Bfield%5D:Nome 
filter%5B0%5D%5Bdata%5D%5Btype%5D:string 
filter%5B0%5D%5Bdata%5D%5Bvalue%5D:nu 
page:1 
start:0 
limit:20 

उत्तर

4

एक कस्टम मॉडल बांधने की मशीन यह दिखाई देता है:

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 संग्रह जो अपने नियंत्रक कार्रवाई तर्क के रूप में लेता है सही ढंग से बाध्य किया जाना चाहिए।

संबंधित मुद्दे