Внедрение простого CRUD с OpenRasta и веб-формами - PullRequest
0 голосов
/ 10 февраля 2012

Меня попросили изучить OpenRasta как альтернативу MVC ASP.NET на работе, и в качестве отправной точки я пытаюсь скопировать учебник Movies с веб-сайта MVC ASP.NET.

Мне очень нравится стиль ReST в OpenRasta, и до сих пор у меня есть простая база данных и обработчик для GET, основанный на ID, в виде

            ResourceSpace.Has.ResourcesOfType<Movie>()
                .AtUri("/movie/{id}")
                .HandledBy<MovieHandler>()
                .RenderedByAspx("~/Views/MovieView.aspx");

Я понимаю, что использование POST и DELETE позволило бы мне создавать / обновлять и удалять элементы из моей базы данных, но, к сожалению, я озадачен тем, как делать представления.

В документации OpenRasta написано:

When you use an aspx page as a view in OpenRasta, you essentially create a template to
generate content. As such, postbacks and events are not supported.

Возможно, я и впрямь глуп, но смогу ли я ПОСТАВИТЬ и УДАЛИТЬ со страницы ASP.NET способом, требуемым OpenRasta? Я использую страницу с выделенным кодом, но я не зациклен на этом.

Я не так хорошо знаком с ASP.NET (не делал ничего целую вечность), поэтому, возможно, я упускаю что-то очевидное, но очень ценю некоторые указатели в правильном направлении.

1 Ответ

1 голос
/ 10 февраля 2012

Это означает, что модель обратной передачи в веб-формах asp.net (то есть поведение, при котором инфраструктура веб-форм asp.net создает один массивный тег формы для непрерывной обратной передачи данных, специфичных для asp.net, на страницу), не поддерживается, поэтому любые события, которые вы можете использовать для элементов управления webforms, не будут работать.

Если вы привыкли к взаимодействиям в стиле MVC, вы знаете, как использовать тег формы, поэтому вы, как обычно, делаете для создания нового фильма.

<form method="post">
  <fieldset>
    <input type="text" name="Name" />
    <input type="submit" />
  </fieldset>

Альтернатива состоит в том, чтобы сделать это в коде, используя механизм веб-форм

<% using(scope(Xhtml.Form<Movie>().Post())) { %>
   <%= Xhtml.TextBox<Movie>(_=>_.Name) %>
<% } >

И ваш код обработчика

public Movie Post(Movie movie) {
  // create the movie instance in your db or whatever
  return new OperationResult.SeeOther { RedirectLocation = movie.CreateUri() };
}

Код компилируется в моей голове и может потребоваться проверка реальности, прежде чем помещать в компилятор.

Обратите внимание, что, возможно, будет хорошей идеей отойти от движка веб-форм, если вы можете, есть лучшие альтернативы (бритва, искра, что бы вы ни решили подключить).

...