我在我的 MySQL 表中创建了 15 个字段,并希望为最终用户提供使用表单添加这么多项目的选项。但是,为了保持界面整洁,我只想向他们展示 2-3 个文本框,并给他们一个按钮,以便他们在需要时添加更多内容。
我不相信使用 Javascript 将文本框添加到表单中会是一个问题,但是一旦我将 POST 数据提交给表单处理程序,我对如何处理它感到困惑。任何人都可以阐明解决此问题的最佳方法吗?
我在我的 MySQL 表中创建了 15 个字段,并希望为最终用户提供使用表单添加这么多项目的选项。但是,为了保持界面整洁,我只想向他们展示 2-3 个文本框,并给他们一个按钮,以便他们在需要时添加更多内容。
我不相信使用 Javascript 将文本框添加到表单中会是一个问题,但是一旦我将 POST 数据提交给表单处理程序,我对如何处理它感到困惑。任何人都可以阐明解决此问题的最佳方法吗?
如果您必须使用包含所有表单值的普通 POST 变量,您应该能够执行以下操作:
当使用服务器语言和/或 javascript 生成文本框时,它们被发送到服务器的方式是它们的name
属性。如果您提供一致的元素命名方式,则可以将事物与数字“组合”。例如,如果您每次用户单击“添加”时提供 2 个文本框(一个用于“foo”,一个用于“bar”),那么您可以在末尾增加数字以确保它们匹配。
<input type="text" name="foo1" /><input type="text" name="bar1" />
<input type="text" name="foo2" /><input type="text" name="bar2" />
and so on
然后在服务器上,您需要找到以“foo”和“bar”开头的 POST 变量中的每个项目
for (item in POST) {
if (item startswith "foo") {
// Extract the number at the end, and find the related "bar"
}
}
假设您将 ASP.NET MVC 用于 Web 应用程序,并将 jQuery 用于客户端框架。
让我们进一步假设您有这样的模型:
public class Gift
{
public string Name { get; set; }
public double Price { get; set; }
}
您的初始操作和数据可能是这样的:
public ActionResult Index()
{
var initialData = new[] {
new Gift { Name = "Tall Hat", Price = 39.95 },
new Gift { Name = "Long Cloak", Price = 120.00 },
};
return View(initialData);
}
而您的观点可能是这样的:
<h2>Gift List</h2>
What do you want for your birthday?
<% using(Html.BeginForm()) { %>
<div id="editorRows">
<% foreach (var item in Model)
Html.RenderPartial("GiftEditorRow", item);
%>
</div>
<input type="submit" value="Finished" />
<% } %>
礼品编辑器的部分视图可能是这样的:
<div class="editorRow">
<% using(Html.BeginCollectionItem("gifts")) { %>
Item: <%= Html.TextBoxFor(x => x.Name) %>
Value: $<%= Html.TextBoxFor(x => x.Price, new { size = 4 }) %>
<% } %>
</div>
关键是“BeginCollectionItem”辅助方法,它在 ASP.NET MVC 中不是标准的。它将为可变长度模型生成一些键。稍后我将添加指向文件的链接。您的处理程序将是这样的:
[HttpPost]
public ActionResult Index(IEnumerable<gift> gifts)
{
// To do: do whatever you want with the data
}
通过这种方法,您将获得一份礼物清单,其中包含文本框中的值。要再添加一项,您需要向该视图发送 ajax 请求:
希望对您有所帮助 来源: http: //blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/ 下载: http: //blog.codeville.net /blogfiles/2010/January/ListEditorDemo.zip