asp.net mvc表单包括for循环表单控制器
我想提交一个表单,其中包含for循环,它在表单控制器上循环,因为我想将模型列表传递到post方法操作中,这样每个表单控制器(TextBoxFor)都会被我的模型列表的相应值填充 我的模型:asp.net mvc表单包括for循环表单控制器,asp.net,asp.net-mvc,forms,model,Asp.net,Asp.net Mvc,Forms,Model,我想提交一个表单,其中包含for循环,它在表单控制器上循环,因为我想将模型列表传递到post方法操作中,这样每个表单控制器(TextBoxFor)都会被我的模型列表的相应值填充 我的模型: public class ExcelRowData { public string LastName { get; set; } public string FirstName { get; set; } public string Score { get; set; } pu
public class ExcelRowData
{
public string LastName { get; set; }
public string FirstName { get; set; }
public string Score { get; set; }
public string EnrollmentTime { get; set; }
public string GraduationTime { get; set; }
}
这是我的观点:
@model List<NewTest.Models.ExcelRowData>
@using (Html.BeginForm("Delete", "MyTest", FormMethod.Post))
{
for (var i = 0 ; i < Model.Count ; i++)
{
<tr>
<td>@Html.TextBoxFor(p => Model[i].LastName)</td>
<td>@Html.TextBoxFor(p => Model[i].FirstName)</td>
<td>@Html.TextBoxFor(p => Model[i].Score)</td>
<td>@Html.TextBoxFor(p => Model[i].EnrollmentTime)</td>
<td>@Html.TextBoxFor(p => Model[i].GraduationTime)</td>
<td><input type="submit" formaction="@Url.Action("Delete", "MyTest", new {Ln = Model[i].LastName})" value="Delete"/></td>
</tr>
}
}
@型号列表
@使用(Html.BeginForm(“Delete”,“MyTest”,FormMethod.Post))
{
对于(var i=0;iModel[i].LastName)
@Html.TextBoxFor(p=>Model[i].FirstName)
@Html.TextBoxFor(p=>Model[i].Score)
@Html.TextBoxFor(p=>Model[i].EnrollmentTime)
@Html.TextBoxFor(p=>Model[i].GraduationTime)
}
}
我从excel文件填充了我的模型,然后在视图中的上表中显示excel数据,然后在删除记录时有一个删除按钮
在我的删除操作中,我通过参数passed from submit按钮删除所选记录,然后重新填充模型,并再次将其传递到同一视图
这是我的控制器中的删除操作:
[HttpPost]
public ActionResult Delete(ExcelRowData evm, string Ln)
{
var exceldata = new List<ExcelRowData>();
var del = evm.FirstOrDefault(p => p.LastName == Ln);
evm.Remove(del);
foreach (var item in evm)
{
exceldata.Add(
new ExcelRowData { LastName = item.LastName, FirstName = item.FirstName, Score = item.Score, EnrollmentTime = item.EnrollmentTime, GraduationTime = item.GraduationTime}
);
}
return View("ExcelTable", exceldata);
}
[HttpPost]
公共操作结果删除(ExcelRowData evm,字符串Ln)
{
var exceldata=新列表();
var del=evm.FirstOrDefault(p=>p.LastName==Ln);
evm.移除(del);
foreach(evm中的var项目)
{
exceldata.Add(
新建ExcelRowData{LastName=item.LastName,FirstName=item.FirstName,Score=item.Score,EnrollmentTime=item.EnrollmentTime,GraduationTime=item.GraduationTime}
);
}
返回视图(“ExcelTable”,exceldata);
}
问题是,当我在任何一行中按delete按钮时,它会从列表底部删除记录,无论我单击哪一行删除记录,它都会从列表底部删除。您会发回整个集合,因此所有属性值都已添加到
ModelState
,生成表单控件的HtmlHelper
方法(除了PasswordFor()
)使用ModelState
(如果存在)中的值,而不是属性值
您可以通过添加
ModelState.Clear();
然而,在返回视图之前,正确的方法是遵循PRG(Post,redirectget)模式,并重定向到Get方法
要了解HtmlHelper
方法使用ModelState
的原因,请参阅
作为补充说明,您可以通过使用ajax删除该项(如果成功删除,则从DOM中删除相应的行)来提高性能,但这意味着您还需要为集合索引器包含一个隐藏输入,以便在您还将更新后的集合发回视图中的其他位置时,可以发回非零/非连续索引器。输入将是
omg!真不敢相信我错过了,老兄你是个救命恩人,谢谢你!