0

我有一个带有 viewModel 的控制器,其中包含一个 IEnumerable,并且我有一个由 jQuery 控件构造的表单。

当我回发到控件时,我想收集收集到 IEnumerable 中的所有隐藏字段行。

这是一个示例视图模型:

public class MyViewModel
{
    public IEnumerable<SelectListItem> GeneratedItems { get; set; }
}

在 jQuery 中,我在带有隐藏字段的表中创建行,如下所示:

<input class="hiddenValue" name="' + controlName + '_guid" type="hidden" value="' + guid + '"></input>

然后在控制器的 POST 方法中,我收到发布的模型。

这是我的问题......如果我接受 IEnumerabe,那么所有的 guid 都会被正确收集。但我还没有设法让它返回一个 IEnumberable。

我尝试添加两个隐藏字段并尝试这样的事情:

<input class="hiddenValue" name="' + controlName + '.Text" type="hidden" value="' + text + '"></input>

<input class="hiddenValue" name="' + controlName + '.Value" type="hidden" value="' + guid + '"></input>

但这会返回一个空数组。

有人可以帮我安排隐藏字段,以便它给我一个我想要的对象的列表吗?

非常感谢

4

2 回答 2

0

Look at Darin Dimitrov example it shows how it must be done in MVC. (example) Main idea is that all inputs will contain index and then model binder fill your IEnumerable automatically.

于 2012-09-20T17:56:16.290 回答
0

为此,您的后期控制器应该是这样的:

[HttpPost]
public ActionResult YourAction(YourViewModel obj, FormCollection FC)
{
    List<SelectListItem> Items = new List<SelectListItem>();

    foreach(var key in FC.AllKeys.Where(K => K.EndsWith(".Text"))
    {
        SelectListItem SI = new SelectListItem { Text = key , Value = FC[key] };
        Items.Add(SI);
    }

    obj.GeneratedItems = Items.AsEnumerable();

    return View(obj);

}

希望这会有所帮助!

于 2012-09-20T17:48:41.567 回答