2016-11-17 2 views
-2

МодельКак я могу получить ValidationMessageДля работы? C# MVC4 Бритва

public class ViewModelA 
{ 
    [Display(Name = "User Name")] 
    [Required(ErrorMessage = "User Name Required")] 
    public string UserName { get; set; } 

    public ViewModelA() { } 
} 

Посмотреть

@using (Html.BeginForm("Register", "Account", FormMethod.Post)) 
{ 
    @Html.ValidationSummary() 
    <div>@Html.LabelFor(m => m.UserName)</div> 
    <div>@Html.TextBoxFor(m => m.UserName)</div> 
    <div>@Html.ValidationMessageFor(m => m.UserName)</div> 
    <div><input type="submit" value="SUBMIT" /></div> 
} 

Контроллер

[HttpPost] 
public ActionResult Register(ViewModels.ViewModelA model) 
{ 
    if (ModelState.IsValid) 
    { 
     // Do Something 
    } 
    else 
    { 
     // Do Something Else 
    } 

    ModelState.Clear(); 

    return View(model); 
} 

Сначала я думал, что это было, потому что у меня не было jquery.validate.min.js или jquery.validate.unobtrusive.min.js, но я включил их, и он ничего не сделал. Затем я попробовал сочетание @Html.ValidationSummary(). Все, что я вижу в stackoverflow, говорит, что я должен работать, но это не так. Что я делаю не так?

+0

код, который вы показали, прекрасно работает если у вас есть 'jquery',' 'jquery.validate' и jquery.validate.unobtrusive' загружен правильно (и есть не отключена проверка на стороне клиента в файле 'web.config'). Если оставить текстовое поле «UserName» пустым и нажать кнопку «Отправить», появится сообщение об ошибке, и он будет отменен. Но почему вы делаете 'ModelState.Clear();' в методе POST и возвращаете представление (которое удалит все ошибки проверки)? –

+0

@StephenMuecke - я хочу в конечном итоге установить сообщение, и единственный способ для поля иметь значение, заполненное контроллером, - использовать ModelState.Clear(); от того, с чем я экспериментировал. – Khaltazar

+0

Непонятно, что вы здесь делаете. Почему вы используете 'ModelState.Clear();'? Если вы отправляете и «ModelState» является действительным, вы сохраняете и перенаправляете (и перенаправляете обратно к тому же методу GET, если хотите, чтобы тот же вид), или если он недействителен, вы возвращаете представление (без ошибок очистки), чтобы ошибки были и пользователь может их исправить. –

ответ

0

Не уверен, но если вы удалите public ViewModelA() { }, значит ли это?

public class ViewModelA 
{ 
    [Display(Name = "User Name")] 
    [Required(ErrorMessage = "User Name Required")] 
    public string UserName { get; set; } 

    //public ViewModelA() { } 
} 

И удалить ModelState.Clear(); тоже:

[HttpPost] 
public ActionResult Register(ViewModels.ViewModelA model) 
{ 
    if (ModelState.IsValid) 
    { 
     // Do Something 
    } 
    else 
    { 
     // Do Something Else 
    } 

    //ModelState.Clear(); 

    return View(model); 
} 
+0

Да, это показывает ValidationMessageFor, но тогда я не получаю никаких обновлений с моей модели от моего контроллера. Например, если я делаю model.UserName = "test", поле не обновляется. – Khaltazar

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