Проверьте, присутствует ли StudentID в StudentTable в действии контроллера - PullRequest
0 голосов
/ 22 июля 2011

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

        public ActionResult LookUpStudentId(string id)
    {

        if(id != //not present in StudentTable)
          return new RedirectResult("~/Error/NotFound");


        return View();

    }

Ответы [ 2 ]

3 голосов
/ 22 июля 2011

Ответ на ваш вопрос будет очень сильно зависеть от технологии доступа к данным, которую вы используете для доступа к вашему SQL-серверу.Поскольку вы не сказали нам об этом, вот как это сделать, используя обычный ADO.NET:

public bool IsStudentExists(string id)
{
    using (var conn = new SqlConnection("some connection string"))
    using (var cmd = conn.CreateCommand())
    {
        conn.Open();
        cmd.CommandText = "SELECT id FROM StudentTable WHERE id = @id";
        cmd.Parameters.AddWithValue("@id", id);
        using (var reader = cmd.ExecuteReader())
        {
            return reader.Read();
        }
    }
}

, а затем:

public ActionResult LookUpStudentId(string id)
{
    if(!IsStudentExists(id))
    {
        return new RedirectResult("~/Error/NotFound");
    }
    return View();
}

Очевидно, что этот код доступа к данным лучше использоватьрефакторинг в репозитории, чтобы ваш контроллер не был тесно связан с используемой вами технологией доступа к данным.Так, например, вы бы определили IStudentsRepository:

public interface IStudentsRepository
{
    Student GetStudent(string id);
}

, который вы затем реализовали бы, и теперь действие вашего контроллера может работать с этой абстракцией:

public class StudentsController: Controller
{
    private readonly IStudentsRepository _repository;
    public StudentsController(IStudentsRepository repository)
    {
        _repository = repository;
    }

    public ActionResult LookUpStudentId(string id)
    {
        var student = _repository.GetStudent(id);
        if(student == null)
        {
            return new RedirectResult("~/Error/NotFound");
        }
        return View(student);
    }
}

Все, что осталось, это сконфигурируйте выбранную вами структуру DI для внедрения правильной реализации этого хранилища в контроллер.

0 голосов
/ 22 июля 2011

Смотрите последнюю страницу моего Intro MVC 3 учебник

 // GET: /Movies/Delete/5 

public ActionResult Delete (int id = 0) {Movie movie = db.Movies.find (ID);if (movie == null) {return HttpNotFound ();} возврат Просмотр (фильм);}

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