【问题标题】:MVC 4 - pass parameter to controller from URL while collecting form dataMVC 4 - 在收集表单数据时将参数从 URL 传递给控制器
【发布时间】:2012-11-07 06:03:58
【问题描述】:

我的视图上有一个包含 2 个字段的表单。用户单击提交按钮,将查询特定于该用户的一些数据以及他们在表单中输入的数据。 用户的电子邮件地址通过 URL 传递。 (例如 ActionName?user_email=yaddd@yyy.com) 我需要从 URL 收集表单数据和电子邮件并将其传递到我的控制器。

我需要从我的数据库中查询数据并向用户显示一条消息。

我找不到关于这个问题的任何好的链接或网站。

这是我迄今为止尝试过的:

    [HttpPost]
    public ActionResult Collect(String s1, String s2, string user_email)
    {}
    and 
    [HttpPost]
    public ActionResult Collect(FormCollection fm, string user_email)
    {}

他们似乎根本不收集表单数据。你有什么建议?

【问题讨论】:

  • 好像没有收集到?您是否尝试过调试代码并查看传递给 user_email 变量的内容?它有没有价值?您能在浏览器中生成的 URL 上看到用户电子邮件吗?
  • 是的,我可以在 URL 上看到电子邮件。
  • 我确实尝试调试并查看是否从表单中收集了一个值,但什么也没有出现:(
  • 什么都没有?所以你的代码在调试点停止(验证它确实调用了正确的控制器),你在调试中看到了变量,它是空的?
  • 您的表单元素是什么样的?你的输入是什么样的?

标签: asp.net-mvc controller asp.net-mvc-4 http-post parameter-passing


【解决方案1】:

您是否考虑过使用模型绑定?理想情况下,我会对您在表单中发送的数据使用模型绑定,并对查询字符串使用操作参数。所以在你的情况下,我会定义一个如下所示的模型

public class MyModel
{
    public string S1 {get; set;}
    public string S1 {get; set;}
}

然后将动作定义为

[HttpPost]
public ActionResult Collect(MyModel model, string user_email)
{
}

这一直对我有用。试一试,如果它不起作用,请告诉我

【讨论】:

  • 感谢您的建议!我觉得很奇怪,在这种情况下只有 formcollection 不起作用!
【解决方案2】:

您是否在同一个控制器中处理请求?只是想知道您是否正在路由到正确的控制器。

否则你可以尝试使用:

[HttpPost]
public ActionResult Collect( /* Your input parameters */ )
{
   string email = Request.QueryString["user_email"];
   // Code
}

【讨论】:

    【解决方案3】:

    这个终于成功了!

    [HttpPost]
    public ActionResult Collect(MyModel model)
    {
    
    string email = Request.QueryString["user_email"];
    // Code
    
    }
    

    【讨论】:

      猜你喜欢
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      • 1970-01-01
      • 1970-01-01
      • 2015-05-05
      • 2016-09-25
      • 2010-09-14
      相关资源
      最近更新 更多