【问题标题】:Pattern to iterate Request Params迭代请求参数的模式
【发布时间】:2011-05-29 03:35:58
【问题描述】:

我的视图不是强类型视图,我需要遍历控制器操作中的请求参数以确定发布的值。

有没有更好的方法来遍历 nameValueCollection AllKeys?

我目前正在循环访问请求参数并适当地设置值。

 foreach (var key in Request.Params.AllKeys)
 { 
     if (key.Equals("CustomerId"))
        queryObject.CustomerId = Request.Params[key];
     else if (key.Equals("OrderId"))
       queryObject.OrderId= Request.Params[key];
     //and so on
 }

我在这段代码中看到了大量的重复。有没有更好的方法来处理这个问题?

【问题讨论】:

  • 为什么不在控制器中执行此操作?我看到queryObject 让我担心你会从你的视图中进行数据库查询。那不是MVC。您应该利用对动作参数的模型绑定在控制器动作中完成所有这些操作。
  • 您应该将@Arce Brito 的答案标记为正确。它正是问题所要求的。为我工作。

标签: c# asp.net asp.net-mvc asp.net-mvc-2


【解决方案1】:

也许是这样的?

queryObject.CustomerId = Request.Params["CustomerId"];
queryObject.OrderId = Request.Params["OrderId"];

【讨论】:

    【解决方案2】:

    因为 NameValueCollection 不提供 Search 方法,并且只需澄清您的代码,您可以执行以下操作:

     foreach (var key in Request.Params.AllKeys)
     { 
          queryObject.CustomerId = key.Equals("CustomerId") ? Request.Params[key] : queryObject.CustomerId;
          queryObject.OrderId = key.Equals("OrderId") ? Request.Params[key] : queryObject.OrderId;
         //and so on ...
     }
    

    【讨论】:

      【解决方案3】:

      你能不能不使用反射从查询对象中获取属性,然后通读它们以从 request.params 中获取相应的项目?

      http://www.csharp-examples.net/reflection-property-names/

      http://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx

      【讨论】:

        【解决方案4】:

        看起来 C# 相当于 Java Map

        Java Map equivalent in C#

        如果没有其他方法,我建议构建一个键值对的Dictionary,然后将值从Dictionary 中读取到类对象中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-06
          • 1970-01-01
          • 2013-07-20
          • 2017-01-20
          • 2022-01-22
          • 2019-11-12
          • 1970-01-01
          • 2016-09-20
          相关资源
          最近更新 更多