有没有办法用查询字符串参数填充动态对象?
这样一来,我在 QS 中的搜索参数就可以变化,而无需将它们直接绑定(bind)到容器对象或不必更改搜索方法的签名。
例如
入站网址:www.test.com/Home/Search?name=john&product=car&type=open&type=all
public ActionResult Search()
{
dynamic searchParams = // **something magic here**
var model = getResults(searchParams);
return View(model);
}
填充的 searchParams 对象应如下所示:
{
name = "john",
product = "car",
type = { "open", "all" }
}
有什么想法吗?
最佳答案
一个解决方案是您建立一个 ExpandoObject来自 Request.QueryString这是一个 NameValueCollection .
编写转换很容易,您可以将其放在扩展方法中:
public static class NameValueCollectionExtensions:
{
public static dynamic ToExpando(this NameValueCollection valueCollection)
{
var result = new ExpandoObject() as IDictionary<string, object>;
foreach (var key in valueCollection.AllKeys)
{
result.Add(key, valueCollection[key]);
}
return result;
}
}
在你的 Controller 中,你可以像这样使用:
public ActionResult Search()
{
dynamic searchParams = Request.QueryString.ToExpando();
DoSomething(searchParams.name);
var model = getResults(searchParams);
return View(model);
}
注意:您将需要做一些额外的转换来处理 type
属性,默认情况下它不会自动成为一个数组。
关于c# - MVC QueryString 到动态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11519824/