gpt4 book ai didi

forms - ASP MVC 3 RAZOR动态表单生成贴

转载 作者:行者123 更新时间:2023-12-02 07:45:39 27 4
gpt4 key购买 nike

我正在尝试创建带有文本字段的表单的 asp mvc 3 页面,这些文本字段是根据我传递到页面 Controller 的模型中的列表中的对象数量动态生成的。我遇到的问题是,每当我发布到 Controller 时,列表都会维护值而不是列表中对象的名称。这是一个例子:

模型:

public class SomeModel
{
List<Field> fieldList;
public SomeeModel()
{
fieldList = new List<Field>();
}


public string Name { get; set; }

public List<Field> FieldList
{
get
{
return fieldList;
}
}

}

Controller :

public ActionResult Preview()
{
SomeModel model = new SomeModel();
model.FieldList.Add( new Field { name = "test 1"});
model.FieldList.Add( new Field { name = "test 2"});
model.FieldList.Add( new Field { name = "test 3"});

return View(model);
}

View :

@using (Html.BeginForm()) {
<div>
<fieldset>
<legend>Input Field List</legend>

@for (var i = 0; i < Model.FieldList.Count(); i++)
{
<div class="editor-label">
@Html.Label(Model.FieldList[i].name)
</div>
<div class="editor-field">
@Html.TextBoxFor(model => Model.FieldList[i].value)
</div>
}

<p>
<input type="submit" value="Generate PDF" />
</p>
</fieldset>
</div>

我在这里看到了类似的帖子 .NET MVC Razor Dynamic Form Generation但答案遇到了和我一样的问题。希望我说清楚了!如果没有,我会发布更多信息。谢谢!

最佳答案

您可以将这些名称包含为隐藏字段。这样它们的值将被发布到 Controller 操作:

@for (var i = 0; i < Model.FieldList.Count(); i++)
{
@Html.HiddenFor(model => Model.FieldList[i].name)
...
}

此外,我建议您使用编辑器模板而不是编写这些循环:

@model SomeModel
@using (Html.BeginForm())
{
<div>
<fieldset>
<legend>Input Field List</legend>
@Html.EditorFor(x => x.FieldList)
<p>
<input type="submit" value="Generate PDF" />
</p>
</fieldset>
</div>
}

以及将为 FieldList 集合的每个元素呈现的相应编辑器模板 (~/Views/Shared/EditorTemplates/Field.cshtml):

@model Field
@Html.HiddenFor(model => model.name)
<div class="editor-label">
@Html.LabelFor(model => model.value, Model.name)
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.value)
</div>

另一种不使用隐藏字段的可能性是将这些名称外部化到某个数据存储中,然后拥有一个可以返回它们的存储库。因此,在您的两个操作中,您只需查询此存储库中的名称即可。因为它们无法更改,所以没有必要将它们包含在 HTML 中。

关于forms - ASP MVC 3 RAZOR动态表单生成贴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7247276/

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