代码之家  ›  专栏  ›  技术社区  ›  Damien

MVC如何调用操作并将request.form映射到其参数

  •  1
  • Damien  · 技术社区  · 16 年前

    我需要创建类似于MVC如何调用方法(操作)的东西,并使用模型绑定器将NamedValueCollection映射到该方法上的参数。基本上,我有一个需要动态调用类上方法的控制器操作,控制器有以窗体或查询字符串形式发送的任何信息,加上要作为字符串调用的方法的名称。

    就我而言,这和调用一个动作是一样的。我本质上是把它传递到另一个层次(有一个很好的理由我不能在控制器btw上使用这些方法)。

    我下载了ASP.NET MVC 1.0源代码,但是有很多类,我在查找处理这些的代码时遇到了问题。

    我知道如何调用一个名称包含在字符串中的方法,但也许MVC使用的方法更好。我还需要知道如何使用模型绑定器向该方法参数发出请求.form+查询字符串。

    如果有人能指出我在MVC源代码中执行此操作的代码,或者在手动使用MVC中的默认模型绑定器方面指明正确的方向,我将不胜感激。

    如果我能更清楚地说出来,请告诉我。

    谢谢

    1 回复  |  直到 16 年前
        1
  •  3
  •   Craig Stuntz    16 年前

        internal static T Bind<T>(string prefix, FormCollection collection, ModelStateDictionary modelState) where T:BaseTimeRecordPresentationModel
        {
            var mbc = new ModelBindingContext()
            {
                ModelName = prefix,
                ModelState = modelState,
                ModelType = typeof(T),
                ValueProvider = collection.ToValueProvider()
            };
            IModelBinder binder = new TimeRecordModelBinder();
            var cc = new ControllerContext();
    
            return binder.BindModel(cc, mbc) as T;
        }
    
        internal static T BindAndAssertValid<T>(string prefix, FormCollection collection) where T:BaseTimeRecordPresentationModel
        {
            var msd = new ModelStateDictionary();
            var result = Bind<T>(prefix, collection, msd);
            if (!msd.IsValid)
            {
                Assert.Fail(ModelStateValidationSummary(msd));
            }
            return result;
        }
    
    推荐文章