TextBoxFor显示错误的名称?

时间:2017-03-27 20:28:00

标签: asp.net-mvc model-binding

我有一个ASP.NET 4.5.6 MVC 5应用程序。以下是我的模型/视图/控制器的摘要:

模型类

public class ViewModelA {
    public ViewModelB CurrentItem { get; set; }
    // ...
}

public class ViewModelB {
    public List<Parameter> Parameters { get; set; }
    // ...
}

public class Parameter {
    public string Name { get; set; }
    public int Position { get; set; }
    // ...
}

查看

@model ViewModelA

@* ... *@

@for (int i = 0; i < Model.CurrentItem.Parameters.Count; i++) {
    @Html.EditorFor(m => m.CurrentItem.Parameters[i])
}

〜/查看/共享/ EditorTemplates / Parameter.cshtml

@model Parameter

<tr>
    <td class="col-md-3">
    </td>
    <td class="col-md-9">
        @Html.TextBoxFor(m => m.Position)
        @Html.TextBoxFor(m => m.Name)

        @* Model.Position always equals list index + 1 *@
        <button type="submit" class="btn btn-default" formaction="@Url.Action("DeleteParameter", "MyController", new { deleteIndex = (Model.Position - 1) })" for formmethod="post" title="Delete parameter">
            <i class="glyphicon glyphicon-minus"></i>
        </button>

        <!-- Debug only -->
        <span>Position = @Model.Position  |  Name = @Model.Name</span>
    </td>
</tr>

控制器操作

[HttpPost]
public ActionResult AddParameter(ViewModelA viewModel) {
    var p = new Parameter() {
        Name = "",
        Position = (byte)(viewModel.CurrentItem.Parameters.Count + 1)
        //...
    };

    viewModel.CurrentItem.Parameters.Add(p);

    return View("Edit", viewModel);
}

[HttpPost]
public ActionResult DeleteParameter(int deleteIndex, ViewModelA viewModel) {
    viewModel.CurrentItem.Parameters.RemoveAt(deleteIndex);

    for (int i = deleteIndex; i < viewModel.CurrentItem.Parameters.Count; i++) {
        viewModel.CurrentItem.Parameters[i].Position--;
    }

    return View("Edit", viewModel);
}

这是一张图片,显示添加几个参数后删除一个参数后的一系列屏幕截图。刷新后,水平红线将每个屏幕分开。

Add and delete parameter

删除位置1中的参数后,我希望其余参数的名称为“Name2”,但仍显示“Name1”(即使“调试范围文本”显示正确的名称)。控制器和模型似乎正在做我期望的事情。为什么视图中的文本框显示错误的名称?

0 个答案:

没有答案