【发布时间】:2026-01-26 17:00:01
【问题描述】:
我目前设置了一个可以工作的 for 循环。但是,当我尝试返回带有此error 的页面时,问题就出现了。 我试图让它最初呈现两个他们需要填写的参考资料,如果他们想为这个页面添加最多两个额外的参考资料,总共 4 人。这是我目前正在使用的代码。 这是页面视图:
<div id="reference-list">
@for (int i = 0; i < Model.Order.References.Count; i++)
{
<div class="reference nomination-person" id="reference-@i">
<h3>Reference @(i+1)</h3>
<div class="person-attribute">
@Html.LabelFor(m => m.Order.References[i].Prefix)
@Html.DropDownListFor(m => m.Order.References[i].Prefix, new SelectList(prefixes))
</div>
<div class="person-attribute">
@Html.LabelFor(m => m.Order.References[i].FirstName)
@Html.TextBoxFor(m => m.Order.References[i].FirstName)
@Html.ValidationMessageFor(m => m.Order.References[i].FirstName)
</div>
<div class="person-attribute">
@Html.LabelFor(m => m.Order.References[i].MiddleName)
@Html.TextBoxFor(m => m.Order.References[i].MiddleName)
</div>
<div class="person-attribute">
@Html.LabelFor(m => m.Order.References[i].LastName)
@Html.TextBoxFor(m => m.Order.References[i].LastName)
@Html.ValidationMessageFor(m => m.Order.References[i].LastName)
</div>
<div class="person-attribute">
@Html.LabelFor(m => m.Order.References[i].Suffix)
@Html.DropDownListFor(m => m.Order.References[i].Suffix, new SelectList(suffixes))
</div>
<div class="person-attribute">
@Html.LabelFor(m => m.Order.References[i].Company)
@Html.TextBoxFor(m => m.Order.References[i].Company)
</div>
<div class="person-attribute">
@Html.LabelFor(m => m.Order.References[i].EmailAddress)
@Html.TextBoxFor(m => m.Order.References[i].EmailAddress)
@Html.ValidationMessageFor(m => m.Order.References[i].EmailAddress)
</div>
<div class="person-attribute">
@Html.LabelFor(m => m.Order.References[i].Telephone)
@Html.TextBoxFor(m => m.Order.References[i].Telephone)
@Html.ValidationMessageFor(m => m.Order.References[i].Telephone)
</div>
</div>
}
</div>
<input type="hidden" name="n-references" id="n-references" value="0" />
<div id="add-reference">Add Reference</div>
控制器
private OrderData GetReferencesData(OrderData data, HttpRequestBase request)
{
data.References = new List<Person>();
/* Since there can be many references, iterate along all and create individual
* persona objects for each */
for (int i = 0; i <= request["n-references"].ToInt(); i++)
{
data.References.Add(new Person
{
Prefix = request["Order.Prefix-" + i] ?? "",
Suffix = request["Order.Suffix-" + i] ?? "",
FirstName = request["Order.FirstName-" + i] ?? "",
MiddleName = request["Order.MiddleName-" + i] ?? "",
LastName = request["Order.LastName-" + i] ?? "",
Company = request["Order.Company-" + i] ?? "",
Telephone = request["Order.Telephone-" + i] ?? "",
EmailAddress = request["Order.EmailAddress-" + i] ?? ""
});
}
return data;
}
虽然在模型中它只是
public List<Person> References;
【问题讨论】:
-
尝试将for循环的结束条件改为
@for (int i = 1; i < Model.Order.References.Count(); i++) -
这不允许他们一次添加超过 4 个引用吗?放入 4 的原因是它不允许向页面添加更多内容。
-
尽管您声称 目前可行 - 它永远不会正确绑定。在将模型传递给视图之前,您需要在控制器中初始化对象并使用
for (int i = 0; i <= Model.Order.References.Count; i++) { @Html.DropDownListFor(m => m.Order.References[i].Prefix, ....)等。如果您想在视图中动态添加更多对象,请参阅this answer -
@StephenMuecke 我将代码更新为我尝试过的。你说我需要在控制器中初始化我的对象,但我不太确定你的意思是什么,所以我也包括了我的控制器。
-
不清楚您在编辑后的代码中尝试做什么(您的
GetReferencesData()方法没有意义,并且请求永远不会包含任何值,例如request["Order.Prefix-" + i])。在控制器中,初始化您的模型并添加 2 个默认对象,例如model.Order.References.Add(new Reference());并将该模型返回到视图。
标签: c# asp.net-mvc for-loop textbox