2013-06-11 3 views
0

В представлении MVC4 я отображение списка элементов с кнопками радио следующим образом:C# MVC4 от бритвы до javascript?

<input type="button" value="Select this address" onclick="setLocation('@Url.RouteUrl("SelectCustomerAddress", new {addressId = item.Id})')" /> 

Далее по мнению у меня есть флажок, где пользователь должен принять условие предоставления услуг, а именно:

@Html.CheckBoxFor(model => model.TermsAccepted) 

Я хотел бы изменить «onclick» так, чтобы ToS были приняты до того, как пользователь продолжит работу. Мне нужно использовать javascript, и если да, то как?

Тогда как должна отображаться ошибка? Использование ValidationSummary?

Edit:

Использование JavaScript ниже, OnClick изменен:

<input type="button" value="Select this address" onclick="selectAddress(@item.Id)" /> 

и Javascript к следующему:

  <script> 
       $(function() { 


        function selectAddress(selectedId) { 
         if ($('#TermsAccepted').is(':checked')) { 
          setLocation('@Url.RouteUrl("SelectCustomerAddress", new { addressId = selectedId})') 
         } 
         else { 
          $('#checkErrorMsg').toggle(); 
         } 
        } 
       }) 
      </script> 
+0

Нет, мне нужно увидеть, откуда вы получаете 'item', находится ли он в' foreach (элемент var в Model.Items) ', если это' item' должно быть хорошо или это просто в документе , в этом случае он должен быть «Model.Id» –

+0

, он находится в пределах foreach –

+0

, затем убедитесь, что ваш 'controller' получает всю информацию для' model', я использую 'viewmodel' для этого. Поместите контрольную точку где-нибудь, чтобы проверить все идентификаторы '' '' '' '' '' '' '' '' '' '' –

ответ

0

Если вы используете хром Осмотрите элемент, вы можете просмотреть ID CheckBoxFor(model => model.TermsAccepted), то вы можете просто проверить его в функции setLocation, прежде чем вы перемещаете пользователя.

Это будет сделано в javascript. Я использую JQuery. Так на странице бритвы Я делаю это:

<script> 
    $(function() { 
     // any javascript in here 
    }) 
</script> 
@Html.CheckBoxFor(model => model.TermsAccepted) 

Это будет автоматически загружать Javascript готово к использованию при загрузке документа. Тогда просто простой тест, используя что-то вроде этого:

if($('#TermsAccepted_Id').is(':checked')) 

#TermsAccepted_Id Ваш флажок, и, как показывает код, вы просто видеть, если он был проверен. Если это не так, просто выведите сообщение об ошибке. Вы можете отобразить сообщение об ошибке, как это:

<script> 
     $(function() { 
      // any javascript in here 
      var setLocationFunction = setLocation('@Url.RouteUrl("SelectCustomerAddress", new {addressId = item.Id})'); 

      function checkTsAndCs() { 
       if($('#TermsAccepted_Id').is(':checked')) 
       { 
       //Everything okay, proceed 
       setLocationFunction(); // this is where you want to call the function from above, it'd be better to make it a variable for use later, i'm not 100% sure on how to call a function, that would be a quick look up for you ;) 
       } 
       else 
       { 
       $('#checkErrorMsg').toggle(); 
       } 
      } 
     }) 
</script> 
@Html.CheckBoxFor(model => model.TermsAccepted) 
<div id="checkErrorMsg" style="display:none">Please accept these before you go on.</div> 

На ваш взгляд поставить это:

<input type="button" value="Select this address" onclick="checkTsAndCs()" /> 

Я не уверен, нужно ли ставить javascript: перед checkTsAndCs в функции OnClick, но опять-таки , вы можете найти это;), я обычно пишу весь javascript javascript в момент времени, а затем сразу забываю все, что смешно знаю, но мой мозг думает, что ему не нужно его запоминать.

+0

'' Это начало. Но поскольку я не могу изменить функцию setLocation, как вызовы checkTsAndCs в onclick и вызов setLocation в checkTsAndCs (также передают ему параметр)? –

+0

В качестве дополнительной заметки обратите внимание, что изменение имени свойства приведет к другому идентификатору и без тестов, вы не сможете поймать проблему, когда ваше событие никогда не будет запущено на вашем клиенте. @ Html.CheckBoxFor (x => x.TermsAccepted, new {id = "TermsAccepted_id}) –

+0

Я отредактирую его для вас, и да @PieterGermishuys вы абсолютно правы. Следите за этим. Ivan-MarkDebono –

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