Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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 Asp.NETMVC验证和;击倒foreach_Asp.net Mvc_Razor_Knockout.js - Fatal编程技术网

Asp.net mvc Asp.NETMVC验证和;击倒foreach

Asp.net mvc Asp.NETMVC验证和;击倒foreach,asp.net-mvc,razor,knockout.js,Asp.net Mvc,Razor,Knockout.js,我有一个MVC4验证和淘汰问题 我尝试了这个解决方案: 但是我遇到了与有效答案注释中列出的相同的问题=>验证只对第一个元素有效 经过几次搜索,我找到了关于模型绑定到列表的这篇文章: 我想知道如何合并这两种解决方案 仅对第一个元素进行验证的样本: Dim dummy As ViewModels.ObjectViewModel = Model.MyObjects.FirstOrDefault @<tbody data-bind='foreach: MyObjects'> &l

我有一个MVC4验证和淘汰问题

我尝试了这个解决方案:

但是我遇到了与有效答案注释中列出的相同的问题=>验证只对第一个元素有效

经过几次搜索,我找到了关于模型绑定到列表的这篇文章:

我想知道如何合并这两种解决方案

仅对第一个元素进行验证的样本:

Dim dummy As ViewModels.ObjectViewModel = Model.MyObjects.FirstOrDefault

@<tbody data-bind='foreach: MyObjects'>
   <td>                   
     @Html.TextBoxFor(Function(model) dummy.Label, New With {.data_bind = "value: Label"})
   </td>
</tbody>
将虚拟对象作为ViewModels.ObjectViewModel=Model.MyObjects.FirstOrDefault进行尺寸调整
@
@Html.TextBoxFor(函数(模型)dummy.Label,使用{.data_bind=“value:Label”}新建)
示例验证工作正常,但如果没有敲除foreach,则无法动态添加项

<tbody>
     @Code
         Dim i As Integer = 0
         For Each object In Model.MyObjects
            @<tr>
               <td>  
                   @Html.TextBoxFor(Function(m) Model.MyObjects(i).Label)                  
               </td>       
            </tr>                        
            i+= 1
         Next
     End Code
</tbody>

@代码
尺寸i为整数=0
对于Model.MyObjects中的每个对象
@
@text.TextBoxFor(函数(m)模型.MyObjects(i).Label)
i+=1
下一个
结束代码

可能是有敲除变量:$index()?

在过去,我曾试图强制将razor和敲除组合起来。但最近,我只是选择了这样或那样的方式。如果我要在客户端呈现一些东西,那么我将直接用HTML定义所有内容,而不是通过razor

在这里,您最好直接定义HTML元素。如果您需要现场验证,那么只需确保两件事:

  • 设置相应的jquery验证属性(例如data val true),以便表单在客户端进行验证
  • 如果要向ASP.NET MVC控制器提交数据,请确保元素具有控制器所需的相同名称/id,以便在控制器方法参数上进行绑定

  • 因此,经过多次搜索和测试,我找到了解决方案:

    1°步骤是为验证输入正确的名称

    Razor视图代码:

    这两个答案对我帮助很大:


    没有必要合并这两种解决方案。KO是为你做的。事实上,如果我使用KO foreach,MVC验证只对第一项有效:/Hey Amhed,谢谢你的反馈。现在我还是想把剃刀和击倒结合起来。我刚刚找到了解决办法。如果有兴趣,请参阅我的答案。:)
    Dim dummy As ViewModels.ObjectViewModel = Model.MyObjects.FirstOrDefault
    
    <tbody data-bind='foreach: MyObjects'>
      <td>
          @Html.TextBoxFor(Function(model) dummy.Label, New With {.data_bind = "value: Label, attr: { name: 'MyObjects[' + $index() + '].Label'}"})                  
      </td>
    </tbody>
    
    viewModel.addObject = function () {
            viewModel.MyObjects.push(new object())
            $("form").data("validator", null);
            $.validator.unobtrusive.parse($("form"));    
        };