我怎么能有一个变量绑定前缀?

时间:2015-02-09 17:56:59

标签: c# asp.net-mvc

我有一个使用Ajax在页面中添加的多个局部视图。我开始使用前缀来避免部分视图之间的名称冲突。

在视图或控制器中,我设置了前缀:

ViewData.TemplateInfo.HtmlFieldPrefix = "MyPartialPrefix";

在视图中,我在使用默认模板或@Html.EditorFor@Html.IdFor时使用@Html.NameFor来获取正确的名称和ID。当我需要一个不在模型中的ID(我需要使用javascript访问的div)时,我使用@Html.Id("SomeRandomElement")

此解决方案完美无缺,直到我决定不止一次使用相同的局部视图。我的自然反射是将静态前缀转换为随机生成的GUID。但是,一些(大多数)部分视图具有表单,这意味着它们最终会被发送到必须绑定模型的控制器操作。使用静态前缀,我可以使用[Bind(Prefix = "MyPartialPrefix")],但如果我切换到GUID,我需要在运行时找到该前缀。我不知道应该在哪里以及如何做。

我的想法是制作一个自定义的ModelBinder来检查名为" ModelPrefix"的字段。与请求一起发送并将其设置为绑定前缀。我在自定义模型绑定器中的变量中得到了前缀,但我不知道如何处理它。没有人看到有"前缀"绑定上下文中的字段就像我最初预期的那样。我一直在寻找ASP.NET MVC源代码来查找BindAttribute的前缀是如何处理的,并且我在代码中越来越深入,直到我甚至不知道我&# 39;我再看了。

public class PrefixModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var prefix = bindingContext.ValueProvider.GetValue("prefix");
        // What do I do at this point?
        return base.BindModel(controllerContext, bindingContext);
    }
}

0 个答案:

没有答案