【问题标题】:mvc3 IModelBinder and urlmvc3 IModelBinder 和 url
【发布时间】:2012-03-09 00:43:44
【问题描述】:

我在使用带有

格式的 url 的 iModelBinder 时遇到问题

http://localhost/controller/action/id/value

动作将是控制器中的功能 id/value 是 ie。 id=12

当我尝试上面的链接时,我收到一个 404 错误页面未找到,并且查看堆栈我可以理解 MVC 正在寻找它不理解的路径。

使用以下作品

http://localhost/controller/action?id=value

如果有人知道这个问题是否可以解决,我真的很希望能够使用“/”作为分隔符。

文斯

【问题讨论】:

  • 有什么特别的理由不要像大多数 MVC 应用程序那样离开 id 并让您的路由定义为您绑定 Id 吗?
  • 嗨,很多处理都是在客户端完成的,MVC 站点正在返回 SOLR 引擎获取数据。到目前为止,我能弄清楚如何将客户端选择传递回服务器的唯一方法是使用 URL 将它们传递给 bakc。它的问题有点违反了 MVC 标准,但我真的想不出另一种方式来完成它
  • @Adam:是有原因的。因为说你有 #!/x/5,2/y/7 或 #!/x/5,2 或 #!/y/7,但永远不要 #!/y/7 或 #!/y/7/x /5,2... 参数必须始终保持相同的顺序,以免我们有 2 个 URL 指向完全相同的内容。
  • @Vince - 您应该发布您的视图和控制器操作,以便更好地说明您想要实现的目标。
  • @sfjedi - 我不确定我是否理解你的推理?什么是 #!是为了代表?你可以有#!/y/7 但不能有#!/y/7?那么你可以拥有哪一个(虽然我不确定是哪一个)。

标签: asp.net-mvc-3 model-binding imodelbinder


【解决方案1】:

网址确实应该采用以下格式:

http://localhost/controller/action/id

例如:

http://localhost/products/index/1

然后应该在控制器操作中指定 id。例如:

public ActionResult Index(int id)
{
    ...

global.asax 文件中指定的路由将指定 url 的格式。对于上面的 url,默认路由就足够了:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

那么默认的model binder会自动将你的id(即上面url中的1)绑定到action中的int id。

就像 Adam 建议的那样,我认为您不应该在 url 中指定 id 的名称,因为默认模型绑定器会自动为您绑定。

【讨论】:

  • 控制器接收一个 IEnumerable 对象,IModelBinder 首先从查询中编译该对象。 “公共 ActionResult GetSomething(IEnumerable myObject) {}
  • @Vince - 我不确定我是否遵循。这与您对 url 的 .../id/value 部分的问题有何关系?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多