从ASP.NET MVC中的FormCollection中提取键/值对

时间:2015-04-10 19:58:08

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

我正在尝试为我们的网站创建一个所有表单都可以指向的通用电子邮件模块。为了使其动态化,我们只想获取表单集合的键值对并在电子邮件中打印它们。

我找到了关于这个主题的以下文章,但似乎无法让它发挥作用。我只是得到空白的结果。我究竟做错了什么? http://www.dofactory.com/topic/1038/how-to-extract-key-values-from-formcollection-in-asp-net-mvc-action-method.aspx

这是我的代码

控制器:

public ActionResult Send(FormCollection formCollection)
{
    foreach (var key in formCollection.Keys)
    {
        Body += "<p><b>";
        Body += key.ToString();
        Body += ":</b> ";
        Body += formCollection[key.ToString()];
        Body += "</p>";
    }
}

表格样本:

<form role="form" action="/Email/Send" method="post">
<div class="row">
    <div class="col-md-3 col-md-offset-1">
        <input type="text" class="form-control" id="Name" placeholder="Name">
    </div>
    <div class="col-md-3">
        <input type="email" class="form-control" id="Email" placeholder="Email">
    </div>
    <div class="col-md-3">
        <input type="text" class="form-control" id="Phone" placeholder="Phone">
    </div>
    <div class="col-md-1">
        <input type="hidden" id="Page" value="http://@Request.ServerVariables["SERVER_NAME"]@Request.ServerVariables["URL"]">
        <button type="submit" class="btn btn-ar btn-success">Submit</button>
    </div>
</div>
</form>

我应该添加函数确实被调用,因为我收到了一个空白的电子邮件与我的主题。我遗漏了其他用于实际发送以节省空间的代码。

1 个答案:

答案 0 :(得分:1)

您的输入元素没有name属性。因此实际上没有任何内容被POST到服务器 - 这就是HTML表单的工作方式。如果您在浏览器中使用了开发人员工具栏的Network选项卡,那么您会看到它。

因此,请务必确保在输入元素上放置name属性:

<input type="text" class="form-control" id="Name" name="Name" placeholder="Name">

只有具有name属性的输入字段会在提交表单时将其值发送到服务器,您将能够在FormCollection参数中检索其值。