ASP NET MVC 3: форма не отправляется из-за обязательного скрытого поля - PullRequest
1 голос
/ 12 января 2012

Я хочу отправить форму, но кнопка не активна. После некоторых поисков я обнаружил, что это связано с проверкой jquery, которую ASP.NET MVC имеет для обязательных полей. По какой-то странной причине ASP NET считает, что мое скрытое поле "UserId" обязательно. Что на самом деле не так. Смотрите часть моей модели здесь:

   public class ResetPasswordModel
   {

        [.....]

     public Guid UserId
     {
       get;
       set;
     }

   }

И источник страницы показывает это:

<input data-val="true" data-val-required="The UserId field is required." id="UserId" name="UserId" type="hidden" value="" />

Есть идеи?!?

Ответы [ 5 ]

1 голос
/ 12 января 2012

Я считаю, что Guid требуется по умолчанию, потому что он не обнуляем. Направляющие обычно являются первичными ключами, поэтому проблематично сделать их обнуляемыми. Попробуйте преобразовать Guid ToString (), чтобы вы могли использовать его в своем представлении, а затем вернуться к Guid, прежде чем использовать его в своем контроллере или модели. Возможно, вам придется создать ViewModel, чтобы сделать это.

1 голос
/ 12 января 2012

Тот факт, что это не обнуляемый тип, означает, что это требуется. Изменить определение на Guid? (включите знак вопроса, чтобы сделать его обнуляемым) Или, что еще лучше, создайте модель представления, у которой ее нет.

0 голосов
/ 12 января 2012

настроить валидатор jQuery для игнорирования скрытых полей. Вот так:

jQuery Validate Игнорировать элементы со стилем

0 голосов
/ 12 января 2012

Вероятно, есть атрибут Key поверх свойства UserId, что означает, что это обязательно

0 голосов
/ 12 января 2012

Вы уверены, что нет отдельного частичного класса, содержащего MetaData, который пометил бы поле как обязательное?

Примерно так:

class UserResetPasswordModelMetaData
{
    [Required(ErrorMessage = "The UserId field is required.")]
    public Guid UserId { get; set; }
}

Поиск вашего проекта для string "The UserId field is required". Могу поспорить, что это где-то там.

Кроме того, как вы определяете пользователя, который пытается сбросить свой пароль, если не по его идентификатору?

...