2012-12-16 3 views
4

Если кто-то может дать мне какой-то намек, я был бы признателен.Отключить обязательную проверку определенного поля в представлении ASP.NET MVC 4

Я искал какое-то время, и я даже нашел сообщение, я думал, что это решит мою проблему, но это не так.

Disable Required validation attribute under certain circumstances

В принципе у меня есть простая модель User.cs, где у меня есть имя, FirstName, LastName и SignupDate

Все они имеют необходимую аннотацию, и я хотел бы решить эту проблему без стирания Обязательный тег.

После того как я генерировать мнение, я стираю в виде HTML код для SignupDate:

<div class="editor-label"> 
     @Html.LabelFor(model => model.SignupDate) 
</div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.SignupDate) 
     @Html.ValidationMessageFor(model => model.SignupDate) 
</div> 

Когда я нажимаю представить он не работает.

Кроме того, если я предложенная в другом посте

<div class="editor-label"> 
     @Html.LabelFor(model => model.SignupDate) 
</div> 
<div class="editor-field"> 
     @Html.TexBoxFor(model => model.SignupDate, new { data_val = false }) 
</div> 

Если я оставлю его как пустой и не работает ..

Любые предложения? Благодаря!!

ответ

0

Я думаю, это должно решить, если предположить model.SignupDate имеет значение:

<%: Html.HiddenFor(model => model.SignupDate) %> 
9

Вы можете отключить клиент валидации на представлении и удалить ошибки на ModelState для тех лиц, вы не хотите, чтобы подтвердить стоимость.

В моем случае я хотел изменить пароль, только если пользователь набрал его. Использование Html.HiddenFor не было хорошим подходом из-за того, что каждый раз отправляет пароль клиенту, а пароль не следует отправлять.

Что я сделал, чтобы отключить клиент валидации на представлении

@model MyProject.Models.ExistingModelWithRequiredFields 

@{ 
    ViewBag.Title = "Edit"; 
    Html.EnableClientValidation(false); 
} 

Это позволяет мне отправить форму даже с пустыми значениями. Обратите внимание, что все проверки клиентов игнорируются, однако проверки сервера все еще выполняются, поэтому вам нужно очистить те, которые вам не нужно выполнять. Чтобы сделать это, перейдите к действию в контроллере и удалите ошибки для каждого свойства, которое вам нужно, чтобы

public ActionResult Edit(ExistingModelWithRequiredFields updatedModel) 
{ 
    var valueToClean = ModelState["RequiredPropertyName"]; 
    valueToClean.Errors.Clear(); 
    if(ModelState.IsValid) 
    { 
     ... 
     //Optionally you could run validations again 
     if(TryValidateModel(updatedModel) 
     { 
      ... 
     } 
     ... 
    } 
    ... 
} 
+0

все еще не работает. ModelState.IsValid становится «TRUE», но сущность не позволяет добавлять в db, хотя у меня есть это поле, которое разрешает null. Я что-то упускаю? – KomalJariwala

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