2015-04-21 2 views
1

Я создал проект ASP.NET MVC с помощью VS2013, и создал модель Перон, как показано ниже:ASP.NET MVC флажок JQuery переключения работают только один раз

Затем скопируйте следующий код, чтобы заменить вид домашнего index.cshmtl файл. Когда я запускаю его, тумблер работал один раз, когда я проверяю флажок, спрятанный сработал, но когда я его отключил, он не будет отображаться. Кто-нибудь, пожалуйста, помогите? Я проверил и увидел подобную проблему, но никаких реальных ответов.

Person.cs, как показано ниже:

using System; 
using System.Linq; 
namespace checkbox.Models 
{ 
    public class Person 
    { 
     public bool IsActive { get; set; } 
     public string Email { get; set; } 
    } 
    } 

Ниже приведен код страницы индекса index.cshtml:

@model checkbox.Models.Person 
@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/bundles/jqueryval") 


@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 

    <div class="form-horizontal"> 
     <h4>Person</h4> 
     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div id="myCheckbox" class="form-group"> 
      @Html.LabelFor(model => model.IsActive, htmlAttributes: 
      new {  @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       <div class="checkbox"> 
        @Html.EditorFor(model => model.IsActive) 
        @Html.ValidationMessageFor(model => model.IsActive, "", 
        new { @class = "text-danger" }) 
       </div> 
      </div> 
     </div> 

     <div id="ShowHideMe" class="form-group"> 
      @Html.LabelFor(model => model.Email, htmlAttributes: 
       new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.Email, 
        new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.Email, "", 
        new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Save" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
} 
<script type="text/javascript"> 
    $(function() { 
     $('#myCheckbox').change(function() { 
      $('#ShowHideMe').toggle($(this).is(':checked')); 
     }); 
    }); 
</script> 

ответ

-2

изменить ваш Javascript в представлении бритвы к этому

<script type="text/javascript"> 
    $(function() { 
     $('#@Html.IdFor(model => model.IsActive)').click(function() { 
      $('#ShowHideMe').toggle($(this).is(':checked')); 
     }); 
    }); 
</script> 

Вместо того, чтобы смотреть событие Change на теге div, используйте флажок непосредственно.

не очень хорошая практика, чтобы смешаться код бритвы с JavaScript, разделите их как можно больше, это облегчит поддержание кода в долгосрочной перспективе

<script type="text/javascript"> 
    $(function() { 
     /*Getting the client id from server side*/ 
     var isActiveId = '@Html.IdFor(model => model.IsActive)'; 

     $('#' + isActiveId).click(function() { 
      $('#ShowHideMe').toggle($(this).is(':checked')); 
     }); 
    }); 
</script> 
+0

Вы не можете смешивать JavaScript/бритву, как это: $ ('#@Html.IdFor (model => model.IsActive)') – AmmarCSE

+0

Да, это нехорошая практика использовать Id как это (я просто хочу показать op для использования Id или класса, вместо жесткого идентификатора кодирования, я сделал это). Просто чтобы вы знали, что это не правило, его просто не очень хорошая практика. – pjobs

+0

нет, я имею в виду, что это синтаксически некорректно, см. Http://stackoverflow.com/questions/4599169/using-razor-within-javascript – AmmarCSE

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