如何将HiddenFor值从视图传递给控制器

时间:2016-05-16 18:11:10

标签: c# asp.net-mvc view controller

我有一个包含列表中数据的视图,我将其填充到表格中。
检视:

@using (Html.BeginForm("DistrictReport", "Reports", FormMethod.Post))
{
@for(int i = 0; i < Model.Count; i++)
{
<tr>
    <td>
        @Html.DisplayFor(model => Model[i].DISTRICT)
        @Html.HiddenFor(model => Model[i].DISTRICT)
    </td>
    <td>
        <input type="submit" name="submitButton" value="Show Report 1"/>
        <input type="submit" name="submitButton" value="Show Report 2"/>
    </td>
</tr>
}
}

这是我的控制器。
控制器:

public ActionResult DistrictReport(string DISTRICT, string submitButton)
{
  if (submitButton.Contains("Show Report"))
  {
    var district = new SqlParameter
      {         
        ParameterName = "District",
        Value = DISTRICT
      };
enter code here
var list = db.Database.SqlQuery<ReportDistrict>("exec getDistrictNumber @District", district).ToList<ReportDistrict>();
    //.....
  }
}

当我单击提交按钮时,页面显示警告DISTRICT值为空。 我需要做的是将DISTRICT值放入Controller中,以便存储过程可以执行。 问题是视图中的每一行都有一个按钮。 这是警告:

'(@District nvarchar(4000))exec getDistrictAndNumber @District' expects the parameter '@District', which was not supplied.

有什么建议吗?任何其他方式也很受欢迎。

2 个答案:

答案 0 :(得分:1)

你有几种选择。

  1. 使用html帮助程序作为开始表单,这将允许您使用表单的详细信息进行发布操作,并且您的提交按钮将发布到该操作。

    https://msdn.microsoft.com/en-us/library/dd505244(v=vs.118).aspx

    beginform接受指定动作和控制器的参数。提交按钮将自动使用此功能。

  2. 使用jQuery执行ajax例程,您可以将其作为ajax url目标操作,并从jQuery ajax“data”值传递控制器的值。使用这种方法,你需要在你的html元素上有id或class,然后你可以在调用ajax方法之前使用jQuery获取它。

    http://api.jquery.com/jquery.ajax/

答案 1 :(得分:1)

您在行动中使用了一个变量,但是在视图中有一个区域列表,这就是您必须在下面使用的原因..

public ActionResult DistrictReport(string[] DISTRICT, string submitButton)