Jquery 验证asp.net mvc4中的动态控件

Jquery 验证asp.net mvc4中的动态控件,jquery,asp.net-mvc-4,validation,razor,Jquery,Asp.net Mvc 4,Validation,Razor,我正在尝试在asp.net mvc 4应用程序中创建一个动态控件。我想要的是,当我提交时,我想要验证必填字段。因此,假设创建了字段类型复选框,并且它是必需的。我想确保,在提交之前已对此进行检查。我是否需要jquery进行验证,或者可以通过任何其他方式进行验证 查看模型 public class SignupViewModel : IValidatableObject { public List<MembershipControls> Controls { get; set; }

我正在尝试在asp.net mvc 4应用程序中创建一个动态控件。我想要的是,当我提交时,我想要验证必填字段。因此,假设创建了字段类型
复选框
,并且它是必需的。我想确保,在提交之前已对此进行检查。我是否需要jquery进行验证,或者可以通过任何其他方式进行验证

查看模型

public class SignupViewModel : IValidatableObject
{
   public List<MembershipControls> Controls { get; set; }

    public List<Groups> Groups { get; set; }
}
查看

@foreach (var groups in Model.Groups)
{
    <label style="font-weight:bold">@groups.GroupTitle</label>

    <div style=" border: 1px solid #CCCCCC;padding:5px">

    @foreach (var row in Model.Controls.Where(r => r.GroupTitle == groups.GroupTitle))
    {
        <div style="padding:7px">

             @if (row.ControlType == "Single Line Text")
             {
                <label>@row.Caption</label>
                <input type="text" name="@row.Name" />
             }
             else if (row.ControlType == "Multi Line Text")
             {
                 <label>@row.Caption</label>
                 <textarea name="@row.Name"></textarea>
             }
             else if (row.ControlType == "Yes/No Choice(Radio Buttons)")
             {                            
                <div>     
                    <label>@row.Caption</label>
                    &nbsp                     
                    <input type="radio" name="@row.Name" value="Yes" /> &nbsp Yes                             
                    &nbsp
                    <input type="radio" name="@row.Name"  value="No" /> &nbsp No
                </div>
             }
             else if (row.ControlType == "Checkbox")
             {
                 <div>
                    <input type="checkbox" name="@row.Name"/> @row.Caption
                 </div>
             }
             else if (row.ControlType == "Date")
             {
                 <div>
                     <label>@row.Caption</label>
                    <input type="date" name="@row.Name"/>
                 </div>
             }
        </div>
    }
</div>
}
@foreach(Model.groups中的变量组)
{
@groups.GroupTitle
@foreach(Model.Controls.Where(r=>r.GroupTitle==groups.GroupTitle))中的var行)
{
@if(row.ControlType==“单行文本”)
{
@行。标题
}
else if(row.ControlType==“多行文本”)
{
@行。标题
}
else if(row.ControlType==“是/否选项(单选按钮)”)
{                            
@行。标题
 
&是的
 
 否
}
else if(row.ControlType==“复选框”)
{
@行。标题
}
else if(row.ControlType==“日期”)
{
@行。标题
}
}
}

我的建议是首先创建一个局部视图,而不是创建一个动态控件;其次,有很多方法可以用来验证该局部视图


您可以使用
DataAnnotations
进行服务器端验证,也可以使用
untrustive
jQuery
进行客户端验证。

只需为所有动态控件分配一个类,例如validate,通过为所有类型的控件编写一个公共验证函数,您就可以使用jQuery轻松地完成这项工作控制。下面的代码为您提供了一个关于如何继续的简要想法

$("input[type=submit]").click(function () {
          $(".validate").each(function () {
              //Textbox validation
              if ($(this).is("input[type=text]")) {
                  //validation logic for textbox
              }
              //TextArea Validation
              if ($(this).is("textarea")) {
                  //validation logic for TextArea
              }
              //RadioButton Validation
              if ($(this).is("input[type=radio]")) {
                  //validation logic for RadioButton
              }
              //Checkbox Validation
              if ($(this).is("input[type=checkbox]")) {
                  //validation logic for Checkbox
              }
              //Date Validation
              if ($(this).is("input[type=date]")) {
                  //validation logic for Date field
              }
          });
      });
当从控制器传递数据时,如果必填字段不是必填字段,则将其设置为“空”,否则将该字段设置为
Mandatory=“validate”如果该字段为必填字段,则会自动添加该类

在您的视图中,您可以向所有控件添加一行
class=“@row.Mandatory”
为了有条件地添加该类,我为textbox创建了该类,并将其应用于其他控件。 例如


希望这有帮助:)

你想做的事毫无意义。。。您想将asp.mvc视图定义移动到奇怪的“动态控件”中。别这样!建立动态控制是我的要求。基本上,我需要给用户一个选项来定义他们想要在表单上构建什么样的控件。是的,但是我的控件是动态的,它们的名称是模态的。如何在jquery中访问它们?我认为验证可能不需要字段的名称,在循环创建字段时,仅当类“validate”是必填字段时才添加它。然后单击submit,它将找到该类的所有可见元素并对其进行验证,验证时不需要任何控件的名称。您可以在此处放置一些代码吗?我有点困惑,在创建新控件时,如何添加类进行验证?您可以在post中查看我的查看代码以供参考
$("input[type=submit]").click(function () {
          $(".validate").each(function () {
              //Textbox validation
              if ($(this).is("input[type=text]")) {
                  //validation logic for textbox
              }
              //TextArea Validation
              if ($(this).is("textarea")) {
                  //validation logic for TextArea
              }
              //RadioButton Validation
              if ($(this).is("input[type=radio]")) {
                  //validation logic for RadioButton
              }
              //Checkbox Validation
              if ($(this).is("input[type=checkbox]")) {
                  //validation logic for Checkbox
              }
              //Date Validation
              if ($(this).is("input[type=date]")) {
                  //validation logic for Date field
              }
          });
      });