在行动中阅读隐藏的字段值?

时间:2013-10-21 04:38:36

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

在MVC-4 Razor视图中,我有一个包含2列的html表。第1列显示一个字段,并将其存储为隐藏字段。表格的第2列有一个<a>点击它,它会重定向到其他控制和操作。

<tbody>
    @foreach (var row in Model.Conversions)
    {
     <tr>
    <td>@(Html.DisplayFor(m => row.LastUpdatedDate))
         @(Html.Hidden("DateFrom",@row .LastUpdatedDate))
    </td>
    <td><a href="@Url.Action("ExchangeRateDetails", "ExchangeRate", new { currencyCode = @row.CurrencyCodeFromTo })">+</a>
    </td>
    </tr>
    }
</tbody>

内部操作我试图读取隐藏的字段值但它是null。这是我的代码:

public virtual ActionResult ExchangeRateDetails(string currencyCode)
        {

            var dat = Request.Form["DateFrom"];

}

问题:

我发现隐藏字段值为null。我的期望是它应该有隐藏领域的价值。我不能将此值作为查询字符串传递。你能指导和帮助我如何阅读隐藏的字段值吗?

非常感谢您的指导并帮助我。

由于

2 个答案:

答案 0 :(得分:2)

使用FormCollection

[HttpPost]
public virtual ActionResult ExchangeRateDetails(FormCollection collection,string currencyCode)
{
     string value = Convert.ToString(collection["DateFrom"]);
     ...
     return View();
}   

以及你为何使用@(然后是hidenfield?请改变它,在html.hidden之前删除'()'

 @Html.Hidden("DateFrom",@row .LastUpdatedDate)

编辑

在锚标记中添加 form =“发布”

<a href="@Url.Action("ExchangeRateDetails", "ExchangeRate", new { currencyCode = @row.CurrencyCodeFromTo **,form="post"**})">+</a>

这对我有用。如果您通过上面编辑的代码在锚标记中添加 form =“Post”,那么您不需要进行任何其他更改,您的代码始终会使用这一小改动。

答案 1 :(得分:1)

Html.Hidden(...)生成隐藏的<input><input>值仅在您提交表单时发送到服务器(通过单击<input type="submit"/>)。

在您的情况下,您正在创建指向其他操作的超链接。当用户点击它时,他将转到指定的URL并且他不会提交当前表单。

您应该将超链接转换为提交按钮,并将表单提交到您想要的操作,或者(在示例中更容易)将字段值包含在URL中:

<td><a href="@Url.Action("ExchangeRateDetails", "ExchangeRate", new { currencyCode = row.CurrencyCodeFromTo, DateFrom = row.LastUpdateDate })">+</a>

编辑:以下是使用表单而非超链接的解决方案:

<tbody>
    @foreach (var row in Model.Conversions)
    {
     <tr>
        @using (Html.BeginForm("ExchangeRateDetails", "ExchangeRate"))
        {
            <td>@Html.DisplayFor(m => row.LastUpdatedDate)
                @Html.Hidden("DateFrom", row.LastUpdatedDate)
                @Html.Hidden("currencyCode", row.CurrencyCodeFromTo)
            </td>
            <td>
                <input type="submit" value="+" />
            </td>
        }
    </tr>
    }
</tbody>

如果你想保留超链接而不是按钮,你也可以这样做,但是当用户点击链接时你必须编写一些JavaScript来提交表单。 或者,您可以将提交按钮重新设置为看起来像超链接。