0

Я пытаюсь реализовать Remote Validation для поля в представлении. Все до сих пор работает, за исключением того, что параметр в методе контроллера проверки равен null, даже если поле содержит значение. Что я упустил?MVC4 Удаленная проверка Не получает значение параметра

Метод проверки Контроллер

public JsonResult IsVanityURL_Available(string VanityURL) 
{ 
    if (!_webSiteInfoRepository.GetVanityURL(VanityURL)) 
     return Json(true, JsonRequestBehavior.AllowGet); 

    string suggestedUID = String.Format(CultureInfo.InvariantCulture, 
     "{0} is not available.", VanityURL); 

    for (int i = 1; i < 100; i++) 
    { 
     string altCandidate = VanityURL + i.ToString(); 
     if (_webSiteInfoRepository.GetVanityURL(altCandidate)) continue; 
     suggestedUID = String.Format(CultureInfo.InvariantCulture, 
      "{0} is not available. Try {1}.", VanityURL, altCandidate); 
     break; 
    } 
    return Json(suggestedUID, JsonRequestBehavior.AllowGet); 
} 

Entity недвижимости

[DisplayName("Vanity URL")] 
[Remote("IsVanityURL_Available", "Validation")] 
[RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed.")] 
[Editable(true)]    
public string VanityURL { get; set; } 

Посмотреть

<div class="row"> 
    <div class="form-group col-md-12"> 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.SelectedContact.WebSiteInfoes[0].VanityURL) 
     </div> 
     <div class="input-group margin-bottom-small"> 
      <span class="input-group-addon"><i class="fa fa-external-link-square fa-fw"></i></span> 
      @Html.TextBoxFor(model => model.SelectedContact.WebSiteInfoes[0].VanityURL, new { @class = "form-control", @placeholder = "Enter Vanity URL" }) 
     </div> 
    </div> 
</div> 

UPDATE Ответ на дубликате пост не фиксирует проблему.

+1

возможный дубликат [Удаленная проверка для СПИСОК МОДЕЛЕЙ] (http://stackoverflow.com/questions/27513472/remote-validation-for-list-of-models) –

+0

Спасибо за указатель Стивен. Я изменил файл jquery.validate с предлагаемым изменением и ничего не изменил. Параметр по-прежнему равен нулю. – Tim

+0

Используйте свои инструменты браузера, чтобы поместить контрольную точку в файл js и убедитесь, что значение 'data' на самом деле' {VanityURL: someValue} ' –

ответ

0

Я нашел альтернативный способ избежать изменения файла jquery.validate.js. Это предполагало установление имя TextBoxFor в представлении, как так ...

@Html.TextBoxFor(model => model.SelectedContact.WebSiteInfoes[0].VanityURL, new { @class = "form-control", @placeholder = "Enter Vanity URL", @Name="VanityUrl }) 

Я вернулся мое изменение JS файл, а затем добавили комбинацию имени атрибута и вид модели дистанционного определения AdditionalFields и он работал просто отлично ,

Это изменение вызвало некоторые непредвиденные проблемы. Наконец-то я получил решение. Я изменил GET на POST и схватил нужные мне значения из FormsCollection. Этот link заставил меня двигаться в правильном направлении. Это позволило мне полностью обойти проблему именования объектов сложных данных

-1
 change your entity 
     [DisplayName("Vanity URL")] 
     [Remote("IsVanityURL_Available", "Validation",AdditionalFields = "VanityURL")] 
     [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed.")] 
     [Editable(true)]    
     public string VanityURL { get; set; } 

    and add this to your view 
    @{ 
    var VanityURL=Model.SelectedContact.WebSiteInfoes[0].VanityURL 
    } 



<div class="row"> 
    <div class="form-group col-md-12"> 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.SelectedContact.WebSiteInfoes[0].VanityURL) 
     </div> 
     <div class="input-group margin-bottom-small"> 
      <span class="input-group-addon"><i class="fa fa-external-link-square fa-fw"></i></span> 
    @Html.TextBox("VanityURL",VanityURL,new { @class = "form-control", @placeholder = "Enter Vanity URL" }) 
     </div> 
    </div> 
</div> 
+0

Спасибо, но я уже пробовал это и не имел успеха. Значение по-прежнему оставалось равным нулю. – Tim

+0

, пожалуйста, опубликуйте весь объект – Mahesh

+0

, чтобы увидеть, как этот обновленный ответ работает на вас или нет – Mahesh