Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net mvc表单包括for循环表单控制器_Asp.net_Asp.net Mvc_Forms_Model - Fatal编程技术网

asp.net mvc表单包括for循环表单控制器

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

我想提交一个表单,其中包含for循环,它在表单控制器上循环,因为我想将模型列表传递到post方法操作中,这样每个表单控制器(TextBoxFor)都会被我的模型列表的相应值填充

我的模型:

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!真不敢相信我错过了,老兄你是个救命恩人,谢谢你!