gpt4 book ai didi

asp.net-mvc-2 - MVC 2、IModelBinder 和 ValueProvider 的变化

转载 作者:行者123 更新时间:2023-12-03 21:53:04 24 4
gpt4 key购买 nike

我正在尝试迁移到 ASP.Net MVC 2 并遇到一些问题。
这是一个:
我需要直接绑定(bind)字典 作为查看帖子的结果。

在 ASP.Net MVC 1 中,它使用自定义 完美运行IModelBinder :

/// <summary>
/// Bind Dictionary<int, int>
///
/// convention : <elm name="modelName_key" value="value"></elm>
/// </summary>
public class DictionaryModelBinder : IModelBinder
{
#region IModelBinder Members

/// <summary>
/// Mandatory
/// </summary>
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
IDictionary<int, int> retour = new Dictionary<int, int>();

// get the values
var values = bindingContext.ValueProvider;
// get the model name
string modelname = bindingContext.ModelName + '_';
int skip = modelname.Length;

// loop on the keys
foreach(string keyStr in values.Keys)
{
// if an element has been identified
if(keyStr.StartsWith(modelname))
{
// get that key
int key;
if(Int32.TryParse(keyStr.Substring(skip), out key))
{
int value;
if(Int32.TryParse(values[keyStr].AttemptedValue, out value))
retour.Add(key, value);
}
}
}
return retour;
}

#endregion
}

它与一些显示数据字典的智能 HtmlBuilder 配合使用。

我现在遇到的问题是 值(value)提供者 不再是 Dictionary<>,它是 IValueProvider 只允许获取名称已知的值
public interface IValueProvider
{
bool ContainsPrefix(string prefix);
ValueProviderResult GetValue(string key);
}

这真的不酷,因为我无法执行我的智能解析......

问题 :
  • 还有其他方法可以获取所有 key 吗?
  • 你知道另一种将 HTML 元素集合绑定(bind)到字典的方法吗

  • 感谢您的建议

    O。

    最佳答案

    尽管此问题已被标记为“已回答”,但我认为以下内容可能会有所帮助。
    我遇到了同样的问题,并查看了 System.Web.Mvc.DefaultValueProvider 的源代码。它从 RouteData、查询字符串或请求表单提交(按确切顺序)获取其值。为了收集所有 key (这是您在第一个问题中要求的),我编写了以下辅助方法。

    private static IEnumerable<string> GetKeys(ControllerContext context)
    {
    List<string> keys = new List<string>();
    HttpRequestBase request = context.HttpContext.Request;
    keys.AddRange(((IDictionary<string,
    object>)context.RouteData.Values).Keys.Cast<string>());
    keys.AddRange(request.QueryString.Keys.Cast<string>());
    keys.AddRange(request.Form.Keys.Cast<string>());
    return keys;
    }

    您可以使用此方法枚举键:
    foreach (string key in GetKeys(controllerContext))
    {
    // Do something with the key value.
    }

    关于asp.net-mvc-2 - MVC 2、IModelBinder 和 ValueProvider 的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2326058/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com