2

这是我的模型:

public class MyModel
{
    public List<long> NeededIds { get; set; }
    public string Name { get; set; }
}

我的控制器:

public ActionResult Create()
{
    MyModel model = new MyModel();
    model.NeededIds = new List<long> { 1, 2, 3, 4 };
    return View(model);
}

[HttpPost]
public ActionResult Create(MyModel model)
{
    string name = model.Name;
    List<long> ids = model.NeededIds;
    return RedirectToAction("Index");
}

并查看:

@model TestMVC.Models.MyModel

@using(Html.BeginForm()) {

<table>
    <thead>
        <tr>
            <th>
                Id
            </th>
        </tr>
    </thead>
    <tbody>
        @foreach(long id in Model.NeededIds) { 
            <tr>
                <td>
                    @id
                </td>
            </tr>
        }
    </tbody>
</table>

@Html.ValidationSummary(true)
<fieldset>
    <legend>MyModel</legend>
    <div class="editor-label">
        @Html.LabelFor(model => model.Name)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Name)
        @Html.ValidationMessageFor(model => model.Name)
    </div>
    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
}

NeededIds在 Get action 中设置,在我可以看到的视图中NeededIds。我在发布操作中也需要它,但在发布操作NeededIds中始终为空。当我在获取操作中设置属性值时,如何在发布操作中获取属性值?你的建议是什么?

4

3 回答 3

2

您没有将您的NeededIds回复发布到服务器。为了使其正常工作,您可以将它们作为隐藏字段添加到表单内的 for 循环中:

@for (int i = 0; i < Model.NeededIds.Count(); i++) { 
    @Html.HiddenFor(model => model.NeededIds[i])
}
于 2012-05-22T07:07:06.103 回答
1

如果您使用的是布局页面,而不是简单地从布局页面中删除表单标签。

于 2012-06-08T06:03:00.130 回答
0

除了 Yakimych 的回答之外,
您还保持 ids 不变.. 这意味着两件事
1. 您可以使用数组代替列表2.您
可以保存 ids 列表/数组TempData并在 POST 时从那里取回它碰巧
你可以在你的 GET 处理程序中这样做

TempData.Add("ids",idArray);

在您的 POST 处理程序中

var idArray = (long[])TempData["ids"];
于 2012-05-22T07:10:38.300 回答