我的应用导航到类似下面的内容,我无法控制这个,因为这是从我正在处理插件的其他应用返回的。
http://myapp.com/MyController?url=myUrl.com&ids%5B%5D=6085620807&ids%5B%5D=6085620743
我试图让那些ID被推回到我的视图中。
p = p.copy(first = 3)
所有我得到的都是空ID,检索网址没问题。任何有关如何使这项工作的想法将不胜感激。
此致
答案 0 :(得分:0)
你的控制器代码是正确的。
public string test(string[] ids)
{
string t = string.Empty;
foreach(string s in ids)
{
t = t + s;
}
return t;
}
您需要为模型绑定器传递数组的索引以识别它。 例如url www.example.com/test?ids[0]=yourfirstvalue将返回您的第一个值作为输出。
但如果您期望在ids数组中有更多项目,则应考虑绑定复杂对象。
请参阅haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx了解详情
答案 1 :(得分:0)
假设您有此网址:
http://myapp.com/MyController?url=myUrl.com&ids=6085620807&ids=6085620743
然后你需要绑定这个动作方法:
public ActionResult MyController(string url, string[] ids)
{
// other stuff
return View();
}
您可以使用从DefaultModelBinder
继承的自定义模型binder类来获取字符串数组:
public class StringArrayModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (value == null || string.IsNullOrEmpty(value.AttemptedValue))
{
return null;
}
return value
.AttemptedValue
// use .Split() here if you want to split by particular character(s)
.ToArray();
}
}
之后,您可以将某个字符串数组的模型绑定器应用为参数:
public ActionResult MyController(string url, [ModelBinder(typeof(StringArrayModelBinder))] string[] ids)
{
Response.Write("<input id='url' value='" + url + "'>");
foreach (string id in ids)
{
Response.Write("<input id='orderIds[" + id + "]' value='" + id + "'>");
}
return View();
}
或者您可以通过在Application_Start
方法中注册来全局应用自定义模型绑定器类:
protected void Application_Start()
{
ModelBinders.Binders.Add(typeof(string[]), new StringArrayModelBinder());
}
答案 2 :(得分:0)
您需要从网址中删除括号,删除控制器字(除非您在控制器名称中复制了控制器字),并包含以下操作:
http://myapp.com/My/test?url=myUrl.com&ids=6085620807&ids=6085620743
路由引擎将查找名为 My 的控制器加上 Controller 一词,然后找到带有2个参数的操作:一个名为 url的字符串和一个名为 ids 的整数数组。
以上网址将适用于此控制器和操作:
public class MyController{
public string test(string url, string[] ids){...}
}