将数据传递给控制器

时间:2015-01-13 14:13:24

标签: asp.net asp.net-mvc asp.net-mvc-5

我有一个数据表,每行显示商店的详细信息 - 可以有任意但唯一的ID - 和商店编号 - 也是唯一的和非顺序的 - 以及其他信息。

当我选择商店编号时,我想显示商店的详细信息。

public class StoreViewModel
{
    public FormatViewModel Formats { get; set; }
    public List<StoreDetailsViewModel> StoreData { get; set; }
}

格式 包含用于实现MvcCheckBoxList的数据,并在通过FormMethod.GET更新复选框时更新StoreData。

商店模式:

public class StoreDetailsViewModel
{
    public int StoreID { get; set; }
    public int StoreNo { get; set; }
    public string StoreFormat { get; set; }
    public string Version { get; set; }

    public int CellNo { get; set; }
    [ForeignKey("CellNo")]
    public virtual Cell Cell { get; set; } 
}

索引页面显示商店表:

@using (Html.BeginForm("Details", "Store", FormMethod.Post))
{
    <table class="table table-condensed table-bordered table-hover table-striped small">
        <tr>
            @*<th class="text-center"></th>*@
            <th class="text-center">No.</th>
            <th class="text-center">Format</th>
            <th class="text-center">CBO Version</th>
            <th class="text-center">Cell</th>
            <th class="text-center"></th>
        </tr>

        @foreach (var item in Model.StoreData)
        {
            <tr>
                <td class="text-center">
                    @Html.Hidden("List_StoreIDs", @item.StoreID)
                    @Html.Hidden("id", @item.StoreID)
                    @item.StoreNo
                </td>
                <td class="text-center">@Html.DisplayFor(modelItem => item.StoreFormat)</td>
                <td class="text-center">@Html.DisplayFor(modelItem => item.Version)</td>
                <td class="text-center">@Html.DisplayFor(modelItem => item.CellNo)</td>
                <td>
                    <input type="submit" name="submit" value=@item.StoreNo />
                </td>
            </tr>
        }
    </table>
}

我无法工作的是传递商店列表中所选行的StoreID(ActionLink可以轻松工作,但我还需要传回List_StoreID)。

我希望@ Html.Hidden(“id”)能够正常工作,但总是1

控制器

public ActionResult Details(int? id, int[] List_StoreIDs, string submit, string book)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    Store store = db.Stores.Find(id);
    if (store == null)
    {
        return HttpNotFound();
    }
 ... do something
}

有什么建议吗?

此致 克雷格

3 个答案:

答案 0 :(得分:1)

如果您让控制器接受StoreViewModel然后使用Html.HiddenFor,数据将在控制器中可用。

答案 1 :(得分:1)

我看到的问题是,您在表的每一行中都有一个隐藏字段和提交按钮,但所有行都采用相同的形式。因此,传递给控制器​​的id将是表单中所有id的列表(可能以&#34; 1&#34;开头),而不是您点击的特定ID。

答案 2 :(得分:1)

每行都有一个提交按钮。是否要在单击其中一个提交按钮时提交整个表单,或者您是否只对包含提交按钮的行中更改的详细信息感兴趣?

如果是后者,则每行可以有一个表单,然后每个表单的“id”值都是正确的(您可能将表单放在一个元素中,并使用Bootstrap css格式化表单)< / p>