2014-09-23 4 views
0

Я пытаюсь создать динамический элемент управления в приложении asp.net mvc 4. Я хочу, когда я отправлю, я хочу подтвердить обязательные поля. Так что давайте скажем, что существует тип поля Checkbox и его обязательный. Я хочу убедиться, что это проверено перед отправкой. Нужен ли мне jquery для проверки, или это можно сделать любыми другими способами?Проверка динамических элементов управления в asp.net mvc4

вид Модель

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

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

Модель

public class Groups 
{ 
    public virtual int Id { get; set; } 
    public virtual string GroupTitle { get; set; } 

} 

public class MembershipControls 
{ 
    public virtual int Id { get; set; } 
    public virtual string UserId { get; set; } 
    public virtual string ControlType { get; set; } 
    public virtual string Caption { get; set; } 
    public virtual string Name { get; set; } 
    public virtual string Mandatory { get; set; } 
    public virtual string Content { get; set; } 
    public virtual string GroupTitle { get; set; } 
    public virtual string RadioButtonOptions { get; set; } 
    public virtual string SelectOptionValues { get; set; } 
    public virtual string SelectOptionText { 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> 
} 
+1

То, что вы пытаетесь сделать, не имеют никакого смысла ... вы хотите переместить asp.mvc определение вида на свой странный «динамический контроль». Не делай этого! – DaniCE

+0

его мое требование построить динамическое управление. в основном мне нужно дать возможность пользователю определить, какие элементы управления они хотят построить на форме. –

ответ

1

Просто присвойте класс, например. подтвердите всем динамическим элементам управления, и вы можете легко его использовать с помощью 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" ко всем элементам управления , чтобы добавить класс условно, я сделал его для текстового поля, применил его к другим элементам управления. .

<input type="text" name="@row.Name" class="@row.Mandatory" />

Надеется, что это помогает :)

+0

Да, но мои элементы управления динамичны, а их имена в модальном. как я могу получить к ним доступ в jquery? –

+0

Я не думаю, что имена полей могут потребоваться для проверки, а при циклическом создании полей динамически добавлять класс «проверять» только в том случае, если это обязательное поле. то при отправке нажмите, он найдет все видимые элементы с этим классом и проверит их, нет необходимости в каком-либо имени элемента управления для проверки. –

+0

можете ли вы поместить здесь код? Я немного смущен, как я могу добавить класс для проверки при создании новых элементов управления? вы можете увидеть мой код просмотра в сообщении для справки –

0

Мой совет, в первую очередь создать частичный вид вместо создания динамического элемента управления, а во-вторых, есть много способов, которыми вы могли бы воспользоваться для проверки этого частичного представления.

Вы можете использовать либо DataAnnotations для проверки на стороне сервера, либо UnobtrusivejQuery для проверки на стороне клиента.

Смежные вопросы