2016-10-27 3 views
1

Мне нужна помощь. У меня есть форма регистрации пользователя, и я должен сопоставить «Клиент» с пользователем.asp.net mvc удаленная проверка с помощью jquery

Теперь я хочу проверить пользовательский «клиент», который пришел из другого источника, и я положил «клиент» в «Список избранных» «Больше», чем 2000, поэтому я использую плагин JQuery Chosen для поиска в списке выбора , но Поле «клиент» зависит от «ролей», поэтому при загрузке страницы «клиент» по умолчанию скрывается по умолчанию, когда я изменяю отображение роли «клиент» (выбранный список выбора), и когда я выбираю клиента, чтобы он не удалял удаленную проверку. Я попытался сделать это видимым на «проверке элемента», и я меняю дисплей: none для отображения: bock и попытаться изменить значение из выбранного его не работает, когда я изменяю значение списка выбора orignal, нажимая на выбранный список, тогда его рабочий штраф Я имею в виду, что он запускает мой метод удаленного валидатора здесь, это полный пример кода, что я делаю. , пожалуйста, помогите, пожалуйста, подтвердите, когда выбрано выбранное значение изменения списка.

Это RegisterViewModel

public class RegisterViewModel 
    { 
     [Required] 
     [Display(Name = "Role")] 
     public string Role { get; set; } 

     //for edit view model additionalFields which will only require for edit mode 
     //[System.Web.Mvc.Remote("DoesCustomerCodeExist", "Account", AdditionalFields = "OldCustomerCode")] 
     [Required(AllowEmptyStrings = false, ErrorMessage = "Customer Code is required.")] 
     [Display(Name = "Customer Code", Description = "A customer code come from our oracle system.")] 
     [System.Web.Mvc.Remote("DoesCustomerCodeExist", "Account")] 
     [Range(0, int.MaxValue, ErrorMessage = "Please enter valid Customer Code in number only.")] 
     public string CustomerCode { get; set; } 

    } 

Вот мой взгляд cshtml в этом файле также есть JS код для отображения клиентов отборных Выберите список, когда роль изменилась.

//select Role 
<div class="form-group"> 
    @Html.LabelFor(m => m.Role, new { @class = "col-md-2 control-label" }) 
    <div class="col-md-10"> 
     @Html.DropDownListFor(x => x.Role, ViewBag.Roles as SelectList,"", new { @class = "form-control chosen-select", data_placeholder = "Select a Role" }) 
     @Html.ValidationMessageFor(m => m.Role, "", new { @class = "text-danger" }) 
    </div> 
</div> 

//Customer Code 
<div class="form-group condition-div user hidden "> 
    //this hidden field is only for edit mode 
    //@Html.Hidden("OldCustomerCode", Model.CustomerCode) 
    @Html.LabelFor(m => m.CustomerCode, new { @class = "col-md-2 control-label" }) 
    <div class="col-md-10"> 
     @Html.DropDownListFor(x => x.CustomerCode, (SelectList)ViewBag.Customers, "", new { @class = "form-control chosen-customers", data_placeholder = "Select Customer" }) 
     @Html.ValidationMessageFor(m => m.CustomerCode, "", new { @class = "text-danger" }) 
    </div> 
</div> 


@section Styles{ 
    @Styles.Render("~/Content/chosen") 
} 

@section Scripts { 
@Scripts.Render("~/bundles/jqueryval") 
@Scripts.Render("~/bundles/chosen") 

<script type="text/javascript"> 
     $('input[type=text]').tooltip(
       { 
        placement: "right", 
        trigger: "focus" 
       } 
      ); 

     $(".chosen-select").chosen({ allow_single_deselect: true}); 

     $('#Role').change(function() { 

      if (this.value == "") { 
       $('.condition-div').addClass('hidden'); // hide all the conidional divs 
      } else if (this.value == "NBP User" || this.value == "NBP Head") { 
       $('.condition-div.admin').addClass('hidden'); /// hide admin conditional divs 
       $('.condition-div.user').removeClass('hidden'); // show user role conditioanl div 
       //configure selectlist to Chosen select and if i remove this line and show orignal select list its working fine mean remote validating on change but if i use this is not working on change. 
       $(".chosen-customers").chosen({ allow_single_deselect: true, search_contains: true }); 
       $.validator.setDefaults({ ignore: ":hidden:not(.chosen-customers)" }); 
      } else if (this.value == "ICIL User" || this.value == "ICIL Head" || this.value == "FIO User") { 
       $('.condition-div.user').addClass('hidden'); /// hide user role conditional divs 
       $('.condition-div.admin').removeClass('hidden'); // show admin role conditional divs 
       $(".chosen-branch").chosen({ allow_single_deselect: true }); 
       $.validator.setDefaults(); 
      } 
     }); 
</script> 
} 

Действие контроллера проверить код клиента

public ActionResult DoesCustomerCodeExist(string CustomerCode, string OldCustomerCode) 
    { 
     //the oldCustomerCode will come null in this case cause its register view and in edit view OldCustomerCode will be use 
     if (CustomerCode == OldCustomerCode) 
      return Json(true, JsonRequestBehavior.AllowGet); 

     if (DbContext.Users.Any(x => x.CustomerCode == CustomerCode)) 
      return Json("Customer code already exists in application. Please verify user details.", JsonRequestBehavior.AllowGet); 

     if (DbOracle.IsCustomerCodeExist(CustomerCode)) 
      return Json(true, JsonRequestBehavior.AllowGet); 
     else 
      return Json("The customer code does not exist in database.", JsonRequestBehavior.AllowGet); 
    } 

Весь код работает отлично, если я не использовал JQuery выбранный плагин. В короткой проблеме используется, когда я использую выбранный плагин для выбора списка. Удаленная проверка - это остановка проверки значений. Я могу обмениваться изображениями, если вам сейчас нужны парни, у меня есть ограниченная учетная запись, поэтому я не могу загрузить снимки снимков .... Пожалуйста, помогите мне.

+0

Я использую OldCustomerCode в мое редактирование и отлично работало без выбора, когда я использую выбранные, он прекратит проверку –

+0

@StephenMuecke, почему вы отметили как дубликат? –

+0

да, я прочитал все эти ответы, и я реализую это в другом приложении, и они работают нормально, но эти проверки для типа requried или match не имеют удаленной проверки, и вы можете прочитать эту строку $ .validator.setDefaults ({ignore: ": hidden: not (.chosen-customers) "}); его среднее игнорирует все, за исключением класса «.chosen-customers». и я использую его при изменении роли. –

ответ

1

вы должны поставить некоторые JQuery на стороне клиента, чтобы отслеживать поле «CustomerCode», когда изменение поля клиента этого нужно просто позвонить «focusout()» событие «CustomerCode», например:

$('#CustomerCode').change(function() { 
     $(this).focusout(); 
    }); 

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

  • Нет связанных вопросов^_^