在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。我的期望是它应该有隐藏领域的价值。我不能将此值作为查询字符串传递。你能指导和帮助我如何阅读隐藏的字段值吗?
非常感谢您的指导并帮助我。
由于
答案 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来提交表单。 或者,您可以将提交按钮重新设置为看起来像超链接。