Asp.net mvc 表格未提交文本框';新价值观

Asp.net mvc 表格未提交文本框';新价值观,asp.net-mvc,forms,asp.net-mvc-4,http-post,Asp.net Mvc,Forms,Asp.net Mvc 4,Http Post,我有一个表单,它的文本框是通过循环生成的,并且包含它的默认值。但是在提交时,我得到了它的默认值,而不是刚刚更新的值 以下是cshtml代码 <fieldset> <legend>Module <small>Edit</small></legend> @using (Html.BeginForm("Edit", "Module")) { @Html.ValidationSummary(true)

我有一个表单,它的文本框是通过循环生成的,并且包含它的默认值。但是在提交时,我得到了它的默认值,而不是刚刚更新的值

以下是
cshtml
代码

<fieldset>
    <legend>Module <small>Edit</small></legend>
     @using (Html.BeginForm("Edit", "Module"))
    {
        @Html.ValidationSummary(true)
        @Html.HiddenFor(m=>m.Id)
        for(var i = 0; i < Model.Properties.Count(); i++)
        {
             @Html.HiddenFor(model=>Model.HiddenProperties[i].Value)
            <label class="label">@Model.Properties[i].Name</label>
            <div class="input-block-level">@Html.TextBoxFor(model => Model.Properties[i].Value, new { @value = Model.Properties[i].Value })</div>
        }

         <div class="form-actions">
        <button type="submit" class="btn btn-primary" id="Submit">Save changes</button>
        @Html.ActionLink("Cancel", "ModuleList", null, new { @class = "btn " })
    </div>

    }
</fieldset>

还是不行

Edit2: 刚刚意识到它默认显示当前值,所以我删除了textboxfor中的新部分。仍然无法在控制器的post方法中获取更新的值。所以现在我有了

<div class="input-block-level">@Html.TextBoxFor(model => Model.Properties[i].Value)</div>
这是我在控制器的post方法中期望的值,但这并没有发生

Edit5: 正如Darin提到的,我在视图中添加了名称字段,现在看起来

        for(var i = 0; i < Model.Properties.Count(); i++)
        {
            @Html.HiddenFor(model=>model.HiddenProperties[i].Name)
             @Html.HiddenFor(model=>model.HiddenProperties[i].Value)
            <label class="label">@Model.Properties[i].Name</label>
            <div class="input-block-level">@Html.TextBoxFor(model => model.Properties[i].Value)</div>
        }
存储库

public EditModule GetModuleProperties(long id)
{
    var properties = new EditModule
        {
            Id = id,
            Properties =_dbSis.Modules.Where(t => t.Id == id)
                                      .SelectMany(m => m.PropertyConfiguration.PropertyInstances.Select(i => new PropertyViewModel
                                       {
                                           Name = i.Property.Name,
                                           Value = i.Value
                                       })).ToList()

        };
    return properties;
}
写:

代替:

@value

就这样吧:

@Html.TextBoxFor(model => model.Properties[i].Value)

您从未发送Name属性,这就是它始终为空的原因。确保将其作为隐藏字段包含:

@Html.HiddenFor(model => model.HiddenProperties[i].Name)
也不要在闭包中捕获
模型
。编写表达式时,请改用
model
变量:

@Html.HiddenFor(model => model.HiddenProperties[i].Value)
此外,您完全不需要设置
属性,这就是Html帮助器的用途:

@Html.TextBoxFor(model => model.Properties[i].Value)

这就是我所做的,如第二版所述。仍然不会发布更改的值,也不会发布旧值。您是否尝试过:model=>model.Properties[i].value(model中是m而不是m)我刚刚发布了,但它仍然不会发布新值我丢失了,我的代码如下:@Html.TextBoxFor(m=>m.Subject)并且它正在工作。对不起,我无法从远处帮助您。您能看到浏览器中实际发布的firebug或类似内容吗?正如您提到的,我发送了
名称
属性,但是
用户更新和帖子仍然没有传递。我已经更新了我的问题和edit5,你可以看到我做了什么。我的名称只是作为标签显示,这并不重要,因为我已将其用于用户引用,以显示用户将要编辑的属性,对我来说,真正重要的是用户更新的值,而不是传递的值:(在屏幕截图中,您显示了
属性被正确设置为
999888
。我不明白问题是什么以及您试图实现什么。第一个屏幕截图显示了用户单击编辑按钮时自动显示的当前值。在第二个屏幕截图中,我手动更改了Micr的值OpnearyRackModuleId从999888到9998887(我要设置的新值),并在保存更改后单击视图,我将被转发到第三个屏幕截图,在那里您可以看到我手动键入并提交的新值不会出现。出现的是用户单击编辑按钮时显示的默认值。我希望我现在更容易理解。我还在屏幕截图之前和之间添加了一些信息,这将可能会让事情更清楚实际上我有
@Html.HiddenFor(model=>model.HiddenProperties[I].Value)
为了存储旧值,以便我可以检查用户是否对以前的值进行了一些更改,如果没有,我将显示错误消息,说明没有更改。因此基本上,
HiddenProperties
将具有以前的值,
Properties
将具有新值
@Value
@value
@Html.TextBoxFor(model => model.Properties[i].Value)
@Html.HiddenFor(model => model.HiddenProperties[i].Name)
@Html.HiddenFor(model => model.HiddenProperties[i].Value)
@Html.TextBoxFor(model => model.Properties[i].Value)