Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 强类型视图绑定对象集合而不受ModelState影响_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc 3 强类型视图绑定对象集合而不受ModelState影响

Asp.net mvc 3 强类型视图绑定对象集合而不受ModelState影响,asp.net-mvc-3,Asp.net Mvc 3,注意:我对ASP.NETMVC还比较陌生,所以我可能在这里采取了错误的方法;别客气,说吧 问题的总结是,如果我有一个视图是强类型的,它是一些模型对象的集合(比如,IEnumerable),我在视图上有多个表单-集合中的每个模型对象一个表单-然后发布其中任何一个表单都会导致所有表单反映编辑的特定对象的值 我理解它为什么这样做;如果您执行了一些服务器端验证或处理,但失败了,那么您不希望丢弃所有用户的更改,并恢复到以前存储在数据库中的内容。我不知道的是如何在表单绑定到多个对象的页面上管理这种行为 下面

注意:我对ASP.NETMVC还比较陌生,所以我可能在这里采取了错误的方法;别客气,说吧

问题的总结是,如果我有一个视图是强类型的,它是一些模型对象的集合(比如,
IEnumerable
),我在视图上有多个表单-集合中的每个模型对象一个表单-然后发布其中任何一个表单都会导致所有表单反映编辑的特定对象的值

我理解它为什么这样做;如果您执行了一些服务器端验证或处理,但失败了,那么您不希望丢弃所有用户的更改,并恢复到以前存储在数据库中的内容。我不知道的是如何在表单绑定到多个对象的页面上管理这种行为

下面是一些演示该行为的示例代码。如果单击任何“保存”按钮,则所有三个表单都会反映所保存表单中的任何字段值。我希望这不会发生;我只想要保存以反映已发布表单变量的行。我对如何实现这一点只有粗略的想法,我不想碰巧编写代码

Models\DataObject.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ModelStateTest.Models {
    public class DataObject {
        public string Field1 { get; set; }
        public string Field2 { get; set; }
        public string Field3 { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ModelStateTest.Models;

namespace ModelStateTest.Controllers {
    public class HomeController : Controller {
        public ActionResult Index() {
            return View("Index", new List<DataObject> {
                new DataObject { Field1 = "Obj 1, Field 1", Field2 = "Obj 1, Field 2", Field3 = "Obj 1, Field 3" },
                new DataObject { Field1 = "Obj 2, Field 1", Field2 = "Obj 2, Field 2", Field3 = "Obj 2, Field 3" },
                new DataObject { Field1 = "Obj 3, Field 1", Field2 = "Obj 3, Field 2", Field3 = "Obj 3, Field 3" }
            });
        }

        public ActionResult SaveItem(DataObject obj) {
            return Index();
        }
    }
}
@model IEnumerable<ModelStateTest.Models.DataObject>

@{
    ViewBag.Title = "Index";
}

@foreach (var obj in Model) {
    using (Html.BeginForm("SaveItem", "Home", FormMethod.Get)) {
        @Html.TextBox("Field1", obj.Field1);
        @Html.TextBox("Field2", obj.Field2);
        @Html.TextBox("Field3", obj.Field3);
        <input type="submit" value="Save" />
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ModelStateTest.Models {
    public class DataObject {
        public int Key { get; set; }
        public string Field1 { get; set; }
        public string Field2 { get; set; }
        public string Field3 { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ModelStateTest.Models;

namespace ModelStateTest.Controllers {
    public class HomeController : Controller {
        public ActionResult Index() {
            return View("Index", new List<DataObject> {
                new DataObject { Key = 1, Field1 = "Obj 1, Field 1", Field2 = "Obj 1, Field 2", Field3 = "Obj 1, Field 3" },
                new DataObject { Key = 2, Field1 = "Obj 2, Field 1", Field2 = "Obj 2, Field 2", Field3 = "Obj 2, Field 3" },
                new DataObject { Key = 3, Field1 = "Obj 3, Field 1", Field2 = "Obj 3, Field 2", Field3 = "Obj 3, Field 3" }
            });
        }

        public ActionResult SaveItem(DataObject obj) {
            return Index();
        }
    }
}
@model IEnumerable<ModelStateTest.Models.DataObject>

@{
    ViewBag.Title = "Index";
}

@foreach (string name in Request.Form) {
    <pre>@name = @Request.Form[name]</pre>
}

@foreach (var obj in Model) {
    using (Html.BeginForm("SaveItem", "Home", FormMethod.Get)) {
        if (Request.QueryString["Key"] == obj.Key.ToString()) {
            @Html.Hidden("Key", obj.Key);
            @Html.TextBox("Field1", obj.Field1);
            @Html.TextBox("Field2", obj.Field2);
            @Html.TextBox("Field3", obj.Field3);
        } else {
            <input type="hidden" name="Key" value="@obj.Key" />
            <input type="text" name="Field1" value="@obj.Field1" />
            <input type="text" name="Field2" value="@obj.Field2" />
            <input type="text" name="Field3" value="@obj.Field3" />
        }
        <input type="submit" value="Save" />
    }
}
控制器\HomeController.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ModelStateTest.Models {
    public class DataObject {
        public string Field1 { get; set; }
        public string Field2 { get; set; }
        public string Field3 { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ModelStateTest.Models;

namespace ModelStateTest.Controllers {
    public class HomeController : Controller {
        public ActionResult Index() {
            return View("Index", new List<DataObject> {
                new DataObject { Field1 = "Obj 1, Field 1", Field2 = "Obj 1, Field 2", Field3 = "Obj 1, Field 3" },
                new DataObject { Field1 = "Obj 2, Field 1", Field2 = "Obj 2, Field 2", Field3 = "Obj 2, Field 3" },
                new DataObject { Field1 = "Obj 3, Field 1", Field2 = "Obj 3, Field 2", Field3 = "Obj 3, Field 3" }
            });
        }

        public ActionResult SaveItem(DataObject obj) {
            return Index();
        }
    }
}
@model IEnumerable<ModelStateTest.Models.DataObject>

@{
    ViewBag.Title = "Index";
}

@foreach (var obj in Model) {
    using (Html.BeginForm("SaveItem", "Home", FormMethod.Get)) {
        @Html.TextBox("Field1", obj.Field1);
        @Html.TextBox("Field2", obj.Field2);
        @Html.TextBox("Field3", obj.Field3);
        <input type="submit" value="Save" />
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ModelStateTest.Models {
    public class DataObject {
        public int Key { get; set; }
        public string Field1 { get; set; }
        public string Field2 { get; set; }
        public string Field3 { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ModelStateTest.Models;

namespace ModelStateTest.Controllers {
    public class HomeController : Controller {
        public ActionResult Index() {
            return View("Index", new List<DataObject> {
                new DataObject { Key = 1, Field1 = "Obj 1, Field 1", Field2 = "Obj 1, Field 2", Field3 = "Obj 1, Field 3" },
                new DataObject { Key = 2, Field1 = "Obj 2, Field 1", Field2 = "Obj 2, Field 2", Field3 = "Obj 2, Field 3" },
                new DataObject { Key = 3, Field1 = "Obj 3, Field 1", Field2 = "Obj 3, Field 2", Field3 = "Obj 3, Field 3" }
            });
        }

        public ActionResult SaveItem(DataObject obj) {
            return Index();
        }
    }
}
@model IEnumerable<ModelStateTest.Models.DataObject>

@{
    ViewBag.Title = "Index";
}

@foreach (string name in Request.Form) {
    <pre>@name = @Request.Form[name]</pre>
}

@foreach (var obj in Model) {
    using (Html.BeginForm("SaveItem", "Home", FormMethod.Get)) {
        if (Request.QueryString["Key"] == obj.Key.ToString()) {
            @Html.Hidden("Key", obj.Key);
            @Html.TextBox("Field1", obj.Field1);
            @Html.TextBox("Field2", obj.Field2);
            @Html.TextBox("Field3", obj.Field3);
        } else {
            <input type="hidden" name="Key" value="@obj.Key" />
            <input type="text" name="Field1" value="@obj.Field1" />
            <input type="text" name="Field2" value="@obj.Field2" />
            <input type="text" name="Field3" value="@obj.Field3" />
        }
        <input type="submit" value="Save" />
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.Mvc;
使用ModelStateTest.Models;
命名空间ModelStateTest.Controllers{
公共类HomeController:控制器{
公共行动结果索引(){
返回视图(“索引”,新列表{
新数据对象{Field1=“Obj 1,字段1”,Field2=“Obj 1,字段2”,Field3=“Obj 1,字段3”},
新数据对象{Field1=“Obj 2,字段1”,Field2=“Obj 2,字段2”,Field3=“Obj 2,字段3”},
新数据对象{Field1=“Obj 3,字段1”,Field2=“Obj 3,字段2”,Field3=“Obj 3,字段3”}
});
}
公共操作结果保存项(DataObject obj){
返回索引();
}
}
}
Views\Home\Index.cshtml:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ModelStateTest.Models {
    public class DataObject {
        public string Field1 { get; set; }
        public string Field2 { get; set; }
        public string Field3 { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ModelStateTest.Models;

namespace ModelStateTest.Controllers {
    public class HomeController : Controller {
        public ActionResult Index() {
            return View("Index", new List<DataObject> {
                new DataObject { Field1 = "Obj 1, Field 1", Field2 = "Obj 1, Field 2", Field3 = "Obj 1, Field 3" },
                new DataObject { Field1 = "Obj 2, Field 1", Field2 = "Obj 2, Field 2", Field3 = "Obj 2, Field 3" },
                new DataObject { Field1 = "Obj 3, Field 1", Field2 = "Obj 3, Field 2", Field3 = "Obj 3, Field 3" }
            });
        }

        public ActionResult SaveItem(DataObject obj) {
            return Index();
        }
    }
}
@model IEnumerable<ModelStateTest.Models.DataObject>

@{
    ViewBag.Title = "Index";
}

@foreach (var obj in Model) {
    using (Html.BeginForm("SaveItem", "Home", FormMethod.Get)) {
        @Html.TextBox("Field1", obj.Field1);
        @Html.TextBox("Field2", obj.Field2);
        @Html.TextBox("Field3", obj.Field3);
        <input type="submit" value="Save" />
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ModelStateTest.Models {
    public class DataObject {
        public int Key { get; set; }
        public string Field1 { get; set; }
        public string Field2 { get; set; }
        public string Field3 { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ModelStateTest.Models;

namespace ModelStateTest.Controllers {
    public class HomeController : Controller {
        public ActionResult Index() {
            return View("Index", new List<DataObject> {
                new DataObject { Key = 1, Field1 = "Obj 1, Field 1", Field2 = "Obj 1, Field 2", Field3 = "Obj 1, Field 3" },
                new DataObject { Key = 2, Field1 = "Obj 2, Field 1", Field2 = "Obj 2, Field 2", Field3 = "Obj 2, Field 3" },
                new DataObject { Key = 3, Field1 = "Obj 3, Field 1", Field2 = "Obj 3, Field 2", Field3 = "Obj 3, Field 3" }
            });
        }

        public ActionResult SaveItem(DataObject obj) {
            return Index();
        }
    }
}
@model IEnumerable<ModelStateTest.Models.DataObject>

@{
    ViewBag.Title = "Index";
}

@foreach (string name in Request.Form) {
    <pre>@name = @Request.Form[name]</pre>
}

@foreach (var obj in Model) {
    using (Html.BeginForm("SaveItem", "Home", FormMethod.Get)) {
        if (Request.QueryString["Key"] == obj.Key.ToString()) {
            @Html.Hidden("Key", obj.Key);
            @Html.TextBox("Field1", obj.Field1);
            @Html.TextBox("Field2", obj.Field2);
            @Html.TextBox("Field3", obj.Field3);
        } else {
            <input type="hidden" name="Key" value="@obj.Key" />
            <input type="text" name="Field1" value="@obj.Field1" />
            <input type="text" name="Field2" value="@obj.Field2" />
            <input type="text" name="Field3" value="@obj.Field3" />
        }
        <input type="submit" value="Save" />
    }
}
@model IEnumerable
@{
ViewBag.Title=“Index”;
}
@foreach(模型中的var obj){
使用(Html.BeginForm(“SaveItem”、“Home”、FormMethod.Get)){
@文本框(“Field1”,obj.Field1);
@文本框(“Field2”,obj.Field2);
@文本框(“Field3”,obj.Field3);
}
}

这是可行的,但很糟糕。我把它贴在这里,希望有人有更好的解决方案。如果我这样做,我基本上必须维护两组表单代码

我已经向DataObject添加了一个“主键”字段,我通过查看Request.QueryString来检查这是否是正在修改的项。如果是,我使用HTML帮助程序。如果不是,则使用普通的旧输入标记。但我不可能相信这是最好的处理方法

Models\DataObject.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ModelStateTest.Models {
    public class DataObject {
        public string Field1 { get; set; }
        public string Field2 { get; set; }
        public string Field3 { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ModelStateTest.Models;

namespace ModelStateTest.Controllers {
    public class HomeController : Controller {
        public ActionResult Index() {
            return View("Index", new List<DataObject> {
                new DataObject { Field1 = "Obj 1, Field 1", Field2 = "Obj 1, Field 2", Field3 = "Obj 1, Field 3" },
                new DataObject { Field1 = "Obj 2, Field 1", Field2 = "Obj 2, Field 2", Field3 = "Obj 2, Field 3" },
                new DataObject { Field1 = "Obj 3, Field 1", Field2 = "Obj 3, Field 2", Field3 = "Obj 3, Field 3" }
            });
        }

        public ActionResult SaveItem(DataObject obj) {
            return Index();
        }
    }
}
@model IEnumerable<ModelStateTest.Models.DataObject>

@{
    ViewBag.Title = "Index";
}

@foreach (var obj in Model) {
    using (Html.BeginForm("SaveItem", "Home", FormMethod.Get)) {
        @Html.TextBox("Field1", obj.Field1);
        @Html.TextBox("Field2", obj.Field2);
        @Html.TextBox("Field3", obj.Field3);
        <input type="submit" value="Save" />
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ModelStateTest.Models {
    public class DataObject {
        public int Key { get; set; }
        public string Field1 { get; set; }
        public string Field2 { get; set; }
        public string Field3 { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ModelStateTest.Models;

namespace ModelStateTest.Controllers {
    public class HomeController : Controller {
        public ActionResult Index() {
            return View("Index", new List<DataObject> {
                new DataObject { Key = 1, Field1 = "Obj 1, Field 1", Field2 = "Obj 1, Field 2", Field3 = "Obj 1, Field 3" },
                new DataObject { Key = 2, Field1 = "Obj 2, Field 1", Field2 = "Obj 2, Field 2", Field3 = "Obj 2, Field 3" },
                new DataObject { Key = 3, Field1 = "Obj 3, Field 1", Field2 = "Obj 3, Field 2", Field3 = "Obj 3, Field 3" }
            });
        }

        public ActionResult SaveItem(DataObject obj) {
            return Index();
        }
    }
}
@model IEnumerable<ModelStateTest.Models.DataObject>

@{
    ViewBag.Title = "Index";
}

@foreach (string name in Request.Form) {
    <pre>@name = @Request.Form[name]</pre>
}

@foreach (var obj in Model) {
    using (Html.BeginForm("SaveItem", "Home", FormMethod.Get)) {
        if (Request.QueryString["Key"] == obj.Key.ToString()) {
            @Html.Hidden("Key", obj.Key);
            @Html.TextBox("Field1", obj.Field1);
            @Html.TextBox("Field2", obj.Field2);
            @Html.TextBox("Field3", obj.Field3);
        } else {
            <input type="hidden" name="Key" value="@obj.Key" />
            <input type="text" name="Field1" value="@obj.Field1" />
            <input type="text" name="Field2" value="@obj.Field2" />
            <input type="text" name="Field3" value="@obj.Field3" />
        }
        <input type="submit" value="Save" />
    }
}
控制器\HomeController.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ModelStateTest.Models {
    public class DataObject {
        public string Field1 { get; set; }
        public string Field2 { get; set; }
        public string Field3 { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ModelStateTest.Models;

namespace ModelStateTest.Controllers {
    public class HomeController : Controller {
        public ActionResult Index() {
            return View("Index", new List<DataObject> {
                new DataObject { Field1 = "Obj 1, Field 1", Field2 = "Obj 1, Field 2", Field3 = "Obj 1, Field 3" },
                new DataObject { Field1 = "Obj 2, Field 1", Field2 = "Obj 2, Field 2", Field3 = "Obj 2, Field 3" },
                new DataObject { Field1 = "Obj 3, Field 1", Field2 = "Obj 3, Field 2", Field3 = "Obj 3, Field 3" }
            });
        }

        public ActionResult SaveItem(DataObject obj) {
            return Index();
        }
    }
}
@model IEnumerable<ModelStateTest.Models.DataObject>

@{
    ViewBag.Title = "Index";
}

@foreach (var obj in Model) {
    using (Html.BeginForm("SaveItem", "Home", FormMethod.Get)) {
        @Html.TextBox("Field1", obj.Field1);
        @Html.TextBox("Field2", obj.Field2);
        @Html.TextBox("Field3", obj.Field3);
        <input type="submit" value="Save" />
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ModelStateTest.Models {
    public class DataObject {
        public int Key { get; set; }
        public string Field1 { get; set; }
        public string Field2 { get; set; }
        public string Field3 { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ModelStateTest.Models;

namespace ModelStateTest.Controllers {
    public class HomeController : Controller {
        public ActionResult Index() {
            return View("Index", new List<DataObject> {
                new DataObject { Key = 1, Field1 = "Obj 1, Field 1", Field2 = "Obj 1, Field 2", Field3 = "Obj 1, Field 3" },
                new DataObject { Key = 2, Field1 = "Obj 2, Field 1", Field2 = "Obj 2, Field 2", Field3 = "Obj 2, Field 3" },
                new DataObject { Key = 3, Field1 = "Obj 3, Field 1", Field2 = "Obj 3, Field 2", Field3 = "Obj 3, Field 3" }
            });
        }

        public ActionResult SaveItem(DataObject obj) {
            return Index();
        }
    }
}
@model IEnumerable<ModelStateTest.Models.DataObject>

@{
    ViewBag.Title = "Index";
}

@foreach (string name in Request.Form) {
    <pre>@name = @Request.Form[name]</pre>
}

@foreach (var obj in Model) {
    using (Html.BeginForm("SaveItem", "Home", FormMethod.Get)) {
        if (Request.QueryString["Key"] == obj.Key.ToString()) {
            @Html.Hidden("Key", obj.Key);
            @Html.TextBox("Field1", obj.Field1);
            @Html.TextBox("Field2", obj.Field2);
            @Html.TextBox("Field3", obj.Field3);
        } else {
            <input type="hidden" name="Key" value="@obj.Key" />
            <input type="text" name="Field1" value="@obj.Field1" />
            <input type="text" name="Field2" value="@obj.Field2" />
            <input type="text" name="Field3" value="@obj.Field3" />
        }
        <input type="submit" value="Save" />
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.Mvc;
使用ModelStateTest.Models;
命名空间ModelStateTest.Controllers{
公共类HomeController:控制器{
公共行动结果索引(){
返回视图(“索引”,新列表{
新数据对象{Key=1,Field1=“Obj 1,Field1”,Field2=“Obj 1,Field2”,Field3=“Obj 1,Field3”},
新数据对象{Key=2,Field1=“Obj 2,Field1”,Field2=“Obj 2,Field2”,Field3=“Obj 2,Field3”},
新数据对象{Key=3,Field1=“Obj 3,Field1”,Field2=“Obj 3,Field2”,Field3=“Obj 3,Field3”}
});
}
公共操作结果保存项(DataObject obj){
返回索引();
}
}
}
Views\Home\Index.cshtml:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ModelStateTest.Models {
    public class DataObject {
        public string Field1 { get; set; }
        public string Field2 { get; set; }
        public string Field3 { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ModelStateTest.Models;

namespace ModelStateTest.Controllers {
    public class HomeController : Controller {
        public ActionResult Index() {
            return View("Index", new List<DataObject> {
                new DataObject { Field1 = "Obj 1, Field 1", Field2 = "Obj 1, Field 2", Field3 = "Obj 1, Field 3" },
                new DataObject { Field1 = "Obj 2, Field 1", Field2 = "Obj 2, Field 2", Field3 = "Obj 2, Field 3" },
                new DataObject { Field1 = "Obj 3, Field 1", Field2 = "Obj 3, Field 2", Field3 = "Obj 3, Field 3" }
            });
        }

        public ActionResult SaveItem(DataObject obj) {
            return Index();
        }
    }
}
@model IEnumerable<ModelStateTest.Models.DataObject>

@{
    ViewBag.Title = "Index";
}

@foreach (var obj in Model) {
    using (Html.BeginForm("SaveItem", "Home", FormMethod.Get)) {
        @Html.TextBox("Field1", obj.Field1);
        @Html.TextBox("Field2", obj.Field2);
        @Html.TextBox("Field3", obj.Field3);
        <input type="submit" value="Save" />
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ModelStateTest.Models {
    public class DataObject {
        public int Key { get; set; }
        public string Field1 { get; set; }
        public string Field2 { get; set; }
        public string Field3 { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ModelStateTest.Models;

namespace ModelStateTest.Controllers {
    public class HomeController : Controller {
        public ActionResult Index() {
            return View("Index", new List<DataObject> {
                new DataObject { Key = 1, Field1 = "Obj 1, Field 1", Field2 = "Obj 1, Field 2", Field3 = "Obj 1, Field 3" },
                new DataObject { Key = 2, Field1 = "Obj 2, Field 1", Field2 = "Obj 2, Field 2", Field3 = "Obj 2, Field 3" },
                new DataObject { Key = 3, Field1 = "Obj 3, Field 1", Field2 = "Obj 3, Field 2", Field3 = "Obj 3, Field 3" }
            });
        }

        public ActionResult SaveItem(DataObject obj) {
            return Index();
        }
    }
}
@model IEnumerable<ModelStateTest.Models.DataObject>

@{
    ViewBag.Title = "Index";
}

@foreach (string name in Request.Form) {
    <pre>@name = @Request.Form[name]</pre>
}

@foreach (var obj in Model) {
    using (Html.BeginForm("SaveItem", "Home", FormMethod.Get)) {
        if (Request.QueryString["Key"] == obj.Key.ToString()) {
            @Html.Hidden("Key", obj.Key);
            @Html.TextBox("Field1", obj.Field1);
            @Html.TextBox("Field2", obj.Field2);
            @Html.TextBox("Field3", obj.Field3);
        } else {
            <input type="hidden" name="Key" value="@obj.Key" />
            <input type="text" name="Field1" value="@obj.Field1" />
            <input type="text" name="Field2" value="@obj.Field2" />
            <input type="text" name="Field3" value="@obj.Field3" />
        }
        <input type="submit" value="Save" />
    }
}
@model IEnumerable
@{
ViewBag.Title=“Index”;
}
@foreach(Request.Form中的字符串名称){
@name=@Request.Form[名称]
}
@foreach(模型中的var obj){
使用(Html.BeginForm(“SaveItem”、“Home”、FormMethod.Get)){
if(Request.QueryString[“Key”]==obj.Key.ToString()){
@隐藏(“Key”,obj.Key);
@文本框(“Field1”,obj.Field1);
@文本框(“Field2”,obj.Field2);
@文本框(“Field3”,obj.Field3);
}否则{
}
}
}