gpt4 book ai didi

c# - 如何在 ASP.NET MVC 中使用多个表单元素

转载 作者:可可西里 更新时间:2023-11-01 08:34:07 25 4
gpt4 key购买 nike

所以我是 ASP.NET MVC 的新手,我想为集合中的每个项目创建一个带有文本框的 View 。我该怎么做,以及如何在它 POST 返回时捕获信息?我使用表单和表单元素为模型构建静态表单,但从未基于可变大小集合动态生成表单元素。

我想在 mvc 3 中做这样的事情:

@foreach (Guest guest in Model.Guests)
{
<div>
First Name:<br />
@Html.TextBoxFor(???) @* I can't do x => x.FirstName here because
the model is of custom type Invite, and the
lambda wants to expose properties for that
type, and not the Guest in the foreach loop. *@
</div>
}

如何为每个客人创建一个文本框?我如何在它发回的操作方法中捕获它们?

感谢您的帮助。

最佳答案

绝对是编辑器模板的工作。所以在你看来,你把这一行:

@Html.EditorFor(x => x.Guests)

和相应的编辑器模板(~/Views/Shared/EditorTemplates/Guest.cshtml)

@model AppName.Models.Guest
<div>
First Name:<br />
@Html.TextBoxFor(x => x.FirstName)
</div>

这就是全部。

现在可以立即执行以下操作:

public ActionResult Index(int id)
{
SomeViewModel model = ...
return View(model);
}

[HttpPost]
public ActionResult Index(SomeViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
// TODO: do something with the model your got from the view
return RedirectToAction("Success");
}

请注意,编辑器模板的名称很重要。如果您的 View 模型中的属性是:

public IEnumerable<Guest> Guests { get; set; }

编辑器模板应称为 Guest.cshtml。它将为 Guests 集合的每个元素自动调用,并将负责正确生成输入的 ID 和名称,以便在您 POST 回时一切自动进行。

结论:每次在 ASP.NET MVC View 中编写循环(forforeach)时,您应该知道自己做错了,并且有一个更好的方法。

关于c# - 如何在 ASP.NET MVC 中使用多个表单元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5070399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com