Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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
C# MVC复制验证_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# MVC复制验证

C# MVC复制验证,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我是MVC的新手,在验证方面有问题。拥有一个模型,其中包括一个可枚举的玩家列表。该模型还包括一个球员和球队的实例。在视图中,我使用foreach语句在表中显示播放器,以便编辑详细信息。在foreach中,我有一个局部视图来处理model.Players列表的迭代。该表单显示所有迭代,并允许用户更改值。如果某个值为空,则它将无法验证回视图。出于某种原因,结果并没有显示具有这些值的其他迭代,也没有显示带有警告的失败迭代,而是重复了具有枚举中项目计数的失败验证的迭代 我一直在跟踪代码,它显示为每个迭代

我是MVC的新手,在验证方面有问题。拥有一个模型,其中包括一个可枚举的玩家列表。该模型还包括一个球员和球队的实例。在视图中,我使用foreach语句在表中显示播放器,以便编辑详细信息。在foreach中,我有一个局部视图来处理model.Players列表的迭代。该表单显示所有迭代,并允许用户更改值。如果某个值为空,则它将无法验证回视图。出于某种原因,结果并没有显示具有这些值的其他迭代,也没有显示带有警告的失败迭代,而是重复了具有枚举中项目计数的失败验证的迭代

我一直在跟踪代码,它显示为每个迭代输入的正确数据,即使在验证失败时也是如此,但在解析到浏览器时,它仍然将每个迭代显示为失败的迭代

模型

看法

局部视图

    @model Players

    @using (Html.BeginForm("EditPlayer", "Campaign", FormMethod.Post, new { name = Model.Id, id = Model.Id }))
    {
        {
    <tr>
        <td><div class="text-box">@Html.EditorFor(p => p.PlayerNumber)@Html.ValidationMessageFor(p => p.PlayerNumber)</div></td>

        <td><div class="text-box">@Html.EditorFor(p => p.PlayerName, new { style = "width:100px" })@Html.ValidationMessageFor(p => p.PlayerName)</div></td>

    @Html.HiddenFor(p => p.Id)
    @Html.HiddenFor(p => p.TeamId)

    <input type="submit" value="Edit" />
</td>
    </tr>
    }
    }
@model播放器
@使用(Html.BeginForm(“EditPlayer”,“Campaign”,FormMethod.Post,new{name=Model.Id,Id=Model.Id}))
{
{
@Html.EditorFor(p=>p.PlayerNumber)@Html.ValidationMessageFor(p=>p.PlayerNumber)
@EditorFor(p=>p.PlayerName,new{style=“width:100px”})@Html.ValidationMessageFor(p=>p.PlayerName)
@Html.HiddenFor(p=>p.Id)
@Html.HiddenFor(p=>p.TeamId)
}
}

检查页面的来源。您的“data valmsg for”很可能具有相同的值。因此,当出现问题时,它将显示每个问题的文本

看起来您需要的是AJAX样式的表单。这应该可以帮助你开始


不确定这是否是问题所在,但您是否打算为表中的每一行创建一个表单?因为BeginForm位于循环内部的局部视图中,所以您正在为每一行创建一个新表单。它正在为每一行创建一个新表单,允许仅提交对该行的更改以进行更改,而您这样做毫无意义。一次只能提交一份表格。除了由于重复的
id
属性而导致的所有无效html之外,您还创建了重复的
name
属性,因此验证错误永远无法与正确的元素匹配(而且您也永远无法从控制器方法返回视图)使用
for
循环或自定义
编辑器或模板
创建一个表单并正确生成集合,以便您可以编辑集合中的任何或所有项目并发回集合,或者具有链接,将您带到编辑集合中单个项目的页面。
     @model TeamPlayersModel
     @foreach (var CurrentPlayer in Model.Players)
     {
        @Html.Partial("_PartialViewForEditPlayer", CurrentPlayer)
     }
    @model Players

    @using (Html.BeginForm("EditPlayer", "Campaign", FormMethod.Post, new { name = Model.Id, id = Model.Id }))
    {
        {
    <tr>
        <td><div class="text-box">@Html.EditorFor(p => p.PlayerNumber)@Html.ValidationMessageFor(p => p.PlayerNumber)</div></td>

        <td><div class="text-box">@Html.EditorFor(p => p.PlayerName, new { style = "width:100px" })@Html.ValidationMessageFor(p => p.PlayerName)</div></td>

    @Html.HiddenFor(p => p.Id)
    @Html.HiddenFor(p => p.TeamId)

    <input type="submit" value="Edit" />
</td>
    </tr>
    }
    }