Mvc 3 проверки свойства, которое выдает исключение - PullRequest
2 голосов
/ 20 октября 2011

У меня в классе модели есть свойство, которое выполняет преобразование типа следующим образом:

Модель:

public class TimeClass
{
    private int timeInSeconds;

    [Required]
    public int Id {get;set;}

    [Required]
    public string Timer
    {
       get {
            TimeSpan ts = new TimeSpan(0,0,(int)timeInSeconds);
            return ts.ToString(@"mm\:ss",CultureInfo.InvariantCulture);
       }
       set {
          try {
             var ts = TimeSpan.ParseExact(value, @"mm\:ss", CultureInfo.InvariantCulture);
             timeInSeconds= Convert.ToInt32(ts.TotalSeconds);
          }
          catch {
             //Is it possible to add a validation error to the modelstate here
          }  
       }
    }
}

Контроллер:

[HttpPost]
public ActionResult Create(FormCollection collection)
{
  string[] whitelist = new[] {"Id", "Timer" };

  if (TryUpdateModel(quiz, whitelist))
  {
    //Save to Repo
    return RedirectToAction("Edit", new { Id = Id });
  }
  return View(tc);
}

Каков подходящий шаблон для добавления соответствующей ModelError, если TimeSpan.Parse выдает исключение? В настоящее время он выдаст общую ошибку «Значение« xxx »недопустимо». Как я могу настроить это, чтобы возвратить определенную ошибку?

1 Ответ

1 голос
/ 20 октября 2011

Вместо того, чтобы помещать ловушку try в вашу модель, вы можете перенести обработку ошибок в код вашего контроллера. Например, если tryupdatemodel выдает исключение, вы можете добавить пользовательскую ошибку модели:

TimeClass model = new TimeClass();
string[] whitelist = new[] {"Id", "Timer" };
try
{
    UpdateModel(model);

    //Save to Repo
    return RedirectToAction("Edit", new { Id = Id });
}
catch
{
    // Generate error
    ModelState.AddModelError(string.Empty, "Model Error Here");

    return View(tc);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...