asp.net mvc绑定一个特定的模型

时间:2011-04-06 11:53:07

标签: asp.net-mvc modelbinders

我有一个带集合的模型

public class Model
{
     IEnumerable<ModelPart> Parts {get;set;}
}

public class Parts 
{
     public string Prop1 {get;set;}
     public string Prop2 {get;set;}
}

但是网址的传播是非常讨厌的。

它有这种形式

dhxGridObj_d3BIc6JfDidc_1_0 =安培; dhxGridObj_d3BIc6JfDidc_1_1 = SSSSS&安培; dhxGridObj_d3BIc6JfDidc_1_2 = SSSSSS&安培; dhxGridObj_d3BIc6JfDidc_2_0 =安培; dhxGridObj_d3BIc6JfDidc_2_1 = AAAA&安培; dhxGridObj_d3BIc6JfDidc_2_2 = AAAAA

它有三个部分用下划线分隔

dhxGridObj_d3BIc6JfDidc_2_1

  1. 部分内容dhxGridObj_d3BIc6JfDidc
  2. 行ID 2
  3. 小区ID 1
  4. 我想知道将这个绑定到我的模型的最佳方法是什么。

    我在考虑将此dhxGridObj_d3BIc6JfDidc_2_1重命名为model[2].Prop1哪里最适合这样做?

2 个答案:

答案 0 :(得分:2)

哦,是的,这是一个丑陋的请求字符串的地狱。自定义模型绑定器是解析此野兽的方法,直到找到解决此问题的真正解决方案当然是修复系统发送此垃圾以符合默认模型绑定器语法。

以下是一些可能使您走上正确轨道的临时代码示例:

public class MyModelBinder : DefaultModelBinder
{
    private const string Prefix = "dhxGridObj_d3BIc6JfDidc";

    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var model = base.BindModel(controllerContext, bindingContext) as Model;
        var request = controllerContext.HttpContext.Request;
        model.Parts = request
            .Params
            .Keys
            .OfType<string>()
            .Select(key => Regex.Match(key, Prefix + "_([0-9]+)_([0-9]+)"))
            .Where(x => x.Success)
            .Select(x => new
            {
                Row = x.Groups[1].Value,
                Col = x.Groups[2].Value
            })
            .GroupBy(x => x.Row)
            .Select(x => new Parts
            {
                Prop1 = request[string.Format("{0}_{1}_{2}", Prefix, x.Key, x.ElementAt(0).Col)],
                Prop2 = request[string.Format("{0}_{1}_{2}", Prefix, x.Key, x.ElementAt(1).Col)],
            });
        return model;
    }
}

将在Application_Start注册:

ModelBinders.Binders.Add(typeof(Model), new MyModelBinder());

答案 1 :(得分:0)

您不应在MVC应用程序的url中使用查询字符串参数。最好的是Url路线。你可以在这里找到一篇关于MVC路线的好文章:

http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx