在嵌套的viewmodel中设置Html.HiddenFor属性

时间:2016-10-10 17:34:28

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

我在发布/提交时尝试在模型中获取GroupGameId的值,但值显示为0(即使在使用HiddenFor后)。我已经确认HttpGet正在正确设置GroupGameId的值,并且视图已收到该值。

的ViewModels

public class GameAssignerModel
{
    // Other properties here....
    public List<GameAssignerTableModel> GameAssignerTable { get; set; }
}

public class GameAssignerTableModel
{
    public int GroupGameId { get; set; }

    [Required]
    public string GameName { get; set; }

    [Required]
    public bool IsAssigned { get; set; }

    public DateTime? UnAssignedDate { get; set; }
}

查看

  @for (int i = 0; i < Model.GameAssignerTable.Count(); i++)
    {
        @Html.HiddenFor(m => m.GameAssignerTable[i].GroupGameId)
        <tr>
            <td>@Model.GameAssignerTable[i].GameName</td>

            <td>
                @Html.EditorFor(m => m.GameAssignerTable[i].IsAssigned)
            </td>
            <td>
                @Html.TextBoxFor(m => m.GameAssignerTable[i].UnAssignedDate, new {id = "UnassignedDate" + i})
            </td>
        </tr>
    }

编辑:数据首先通过ajax提交,我不知道这是否重要。我已经验证它正在我的控制器中执行POST操作,并且其他模型数据正在正确提交。

    if ($("#assignGames").valid()) {
        $.ajax({
            url: this.action,
            type: this.method,
            data: $(this).serialize(),
            success: function (result) {
                if (result.success) {
                    $("#assignModal").modal("hide");
                    location.reload();
                }

2 个答案:

答案 0 :(得分:2)

通过将@Html.HiddenFor(m => m.GameAssignerTable[i].GroupGameId)放在<td>

GameName标记内解决了问题
@for (int i = 0; i < Model.GameAssignerTable.Count(); i++)
{

    <tr>
        <td>
            @Model.GameAssignerTable[i].GameName
            @Html.HiddenFor(m => m.GameAssignerTable[i].GroupGameId)
    </td>

        <td>
            @Html.EditorFor(m => m.GameAssignerTable[i].IsAssigned)
        </td>
        <td>
            @Html.TextBoxFor(m => m.GameAssignerTable[i].UnAssignedDate, new {id = "UnassignedDate" + i})
        </td>
    </tr>
}

答案 1 :(得分:-1)

我相信如果您在浏览器中检查输入html元素,您将看到问题。 name属性可能不正确。要修复,可以为hiddenfor元素添加额外参数:

new {Name = "GroupGameId"}

这应该修复该元素的发布。