【问题标题】:Editing IEnumerable Model Property in MVC View在 MVC 视图中编辑 IEnumerable 模型属性
【发布时间】:2011-12-06 01:12:49
【问题描述】:

我有一种情况需要在视图模型中编辑可枚举属性:

public class ViewModel
{
    public MyObj Obj { get; set; }
    public IEnumerable<MyObj> MyObjs = new List<MyObj>();
}

我关注了this的帖子;控制器动作:

public ActionResult Index()
{
    var viewModel = new ViewModel();
    viewModel.Obj = new Obj() { Name = "0", Value = true };
    var o1 = new MyObj() { Name = "1", Value = false };
    var o2 = new MyObj() { Name = "2", Value = false };
    viewModel.Objs = new List<Obj>() { o1, o2 };

    return View(viewModel);
}

[HttpPost]
public ActionResult Index(ViewModel viewModel)
{
    return View(viewModel);
}

Index 视图如下:

<% using (Html.BeginForm()) { %>

    <table>
        <tr>
            <th>Name</th>
            <th>Value</th>
        </tr>
        <%= Html.EditorFor(x => x.Objs) %>
    </table>

    <br />

    <input type="submit" value="Submit" />

<% } %>

以及“~/Views/Home/EditorTemplates/Obj.ascx”中的编辑器模板:

    <tr>
        <td><%: Html.TextBoxFor(x => x.Name) %></td>
        <td><%: Html.CheckBoxFor(x => x.Value) %></td>
    </tr>

问题是:浏览到索引,数据显示出来。 POST,可枚举数据消失。单步执行,视图模型中的单数“Obj”仍然存在,因此消失的只是可枚举数据。

我已经盯着这个有一段时间了,如果有人能帮忙,那就太棒了。

干杯,

蒂姆。

【问题讨论】:

    标签: asp.net-mvc-2


    【解决方案1】:

    看看 Phil Haack 的 this post,MVC2 本身不支持将列表绑定回视图模型,除非您进行一些操作。

    更新:我对此进行了更多研究,并认为您应该尝试将TryUpdateModel(viewModel.MyObjs, "MyObjs"); 添加到您的控制器中。这会通知模型绑定器它应该使用“MyObjs”绑定前缀将表单中的数据附加到 ViewModel 中的集合。

    【讨论】:

    • 我在这篇文章中发现的唯一区别是使用了“for”语句。不幸的是,这并没有产生任何不同的 HTML 或任何不同的结果。
    • 您是否检查过视图中生成的 HTML?是否所有的 Obj 编辑器都具有相同的名称/ID?它们应该使用索引器生成(即&lt;input name="MyObj[1]"&gt;
    • 再次感谢您的帮助,斯蒂芬。不幸的是,他们似乎是正确的 - 例如。 name="MyObjs[0].Name" 和 "MyObjs[1].Name" - 因此我没有任何线索!
    • 已更新我的答案,请尝试在您的控制器中使用TryUpdateModel(viewModel.MyObjs, "MyObjs");
    • 斯蒂芬,这太棒了 - 它有效。这花费了相当长的时间,但添加 TryUpdateModel 已经成功了。非常感谢,伙计!
    猜你喜欢
    • 2011-10-24
    • 2011-08-14
    • 1970-01-01
    • 2017-07-01
    • 2012-10-26
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多