1

在 MVC-4 Razor 视图中,我有一个包含 2 列的 html 表。第一列显示一个字段并将其存储为隐藏字段。表格的第二列有一个<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>

内部操作我正在尝试读取隐藏字段值,但它为空。这是我的代码:

public virtual ActionResult ExchangeRateDetails(string currencyCode)
        {

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

}

问题:

我发现隐藏字段值为空。我的期望是它应该具有来自隐藏字段的价值。我不能将此值作为查询字符串传递。您能否指导并帮助我如何阅读隐藏字段值?

非常感谢您的指导和帮助。

谢谢

4

2 回答 2

2

使用表单集合

[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="Post"

喜欢

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

它对我有用。如果您通过上面编辑的代码在锚标记中添加form="Post",那么您不需要任何其他更改,您的代码始终可以处理这个小更改。

于 2013-10-21T04:51:36.210 回答
1

Html.Hidden(...)生成一个隐藏的<input>. 仅当您提交表单(通过单击 a )时,这些<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 来在用户单击链接时提交表单。或者,您可以重新设置提交按钮的样式,使其看起来像一个超链接。

于 2013-10-21T04:47:10.607 回答