2016-03-02 4 views
1

Я новичок в ASP.NET MVC и пытаюсь проверить текстовое поле. В принципе, если пользователь вводит менее 2 или не номер, как я могу получить ошибку для отображения. Вот tutorial Я стараюсь следовать.Как проверить текстовые поля в ASP.NET MVC

У меня есть код ниже.

Создать вид:

<%= Html.ValidationSummary()%> 
<%= using (HtmlBeginForm()){%> 
<div class="half-col"> 
    <label for="Amount">Amount:</label> 
    <%= Html.TextBox("Amount")%> 
    <%= Html.ValidationMessage("Amount", "*")%> 
</div> 

Создание контроллера:

[AcceptVerbs (HttpVerbs.Post)] 
public ActionResult Create([Bind(Exclude ="ID")] Charity productToCreate) 
{ 
    //Validation 
    if (productToCreate.Amount < 2) 
     ModelState.AddModelError("Amount, Greater than 2 please"); 

    return View(db.Donations.OrderByDescending(x => x.ID).Take(5).ToList()); //Display 5 recent records from table 
} 

Модель:

public class Charity 
{ 
    public int ID { get; set; } 
    public string DisplayName { get; set; } 
    public DateTime Date { get; set; } 
    public Double Amount { get; set; } 
    public Double TaxBonus { get; set; } 
    public String Comment { get; set; } 
} 

Ошибка:

CS1501 No overload for method 'AddModelError' takes 1 CharitySite

+0

В MVC вы не проверяете текстовое поле, вы проверяете модель. Текстовые поля связаны с свойствами модели, и если эти свойства модели не проверяются, отображается ошибка, связанная с текстовым полем для этого свойства. –

+1

Почему вы следуете учебнику с 2009 года? Если вы хотите узнать asp.net MVC, узнайте последнюю версию. – ataravati

ответ

4

Вы добавляете ошибку в ваш ModelState неправильно. Вы можете прочитать больше о ModelStateDictionary на MSDN

AddModelError принимает 2 параметра, так что вы хотели бы:

ModelState.AddModelError("Amount", "Greater Than 2 Please."); 

Сказав, что вы можете использовать атрибуты, чтобы проверить свои свойства модели, так что вы не имеете чтобы написать весь этот код вручную. Ниже приведен пример использования атрибута Range. Атрибут RegularExpression также может работать. Вот статья MSDN, содержащая информацию о различных типах атрибутов.

public class Charity 
{ 
    public int ID { get; set; } 
    public string DisplayName { get; set; } 
    public DateTime Date { get; set; } 

    [Range(2, Int32.MaxValue, ErrorMessage = "The value must be greater than 2")] 
    public Double Amount { get; set; } 
    public Double TaxBonus { get; set; } 
    public String Comment { get; set; } 
} 

Также как примечание стороны, учебник вы следуете для MVC 1 & 2. Если вы не должны использовать/узнать, что. Я бы рекомендовал следовать руководству для MVC 5 here.

+0

Спасибо за ответ и учебники! , Я попробовал ваш второй подход, но в «Range» и «ErrorMessage» появляется строка squigly red, в которой «Тип или имя пространства имен» «не удалось найти» (вам не хватает ссылки на директиву или сборку?) », Любая идея как это можно решить? – John

+0

@john Если вы используете визуальную студию, вы должны иметь возможность «ctrl +.», Когда ваш курсор находится на squiggly и получает список включений. Если нет, вам просто нужно: 'using System; с использованием System.ComponentModel.DataAnnotations; ' – drneel

+0

Top lad! Большое спасибо. – John

1

Изменение этой линии:

ModelState.AddModelError("Amount, Greater than 2 please"); 

к:

ModelState.AddModelError("Amount ", "Amount, Greater than 2 please"); 

Первый параметр является членом модели проверяемого; это может быть пустая строка, чтобы указать ошибку, не связанную с полем. Указав поле «Сумма», внутренне оно использует это, чтобы выделить поле ошибки (в элемент управления должен быть добавлен CSS-класс с ошибкой ввода-проверки), если вы используете все части проверки на стороне клиента.

0
if (productToCreate.Amount < 2) 
    ModelState.AddModelError("Amount", "Greater than 2 please"); 
Смежные вопросы