2016-05-10 2 views
0

Я пытаюсь реализовать небольшое приложение для шаблонов, которое будет генерировать простые html-выходы из XML-источника данных.Asp.net Razor website (v3) code behind - Request is null

Я создал новый веб-сайт Razor, имеют вид на заказ бритвы и код позади класса для него, а также:

Employee.cshtml:

@inherits Employee 
@{ 
    Layout = "~/_SiteLayout.cshtml"; 
} 
<div> @this.Name /*works OK from codebehind */ </div> 
<div> @(Request.QueryString["id"] ?? "") /* works OK here */</div> 

Employee.cs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Hosting; 
using System.Xml.Linq; 

public abstract class Employee : System.Web.WebPages.WebPage 
{ 

    public Employee() 
    { 
     // load xml, etc. 
     string id = Request.QueryString["id"] ?? "default"; // Fails: Request is null 
    } 

    public GetValue(string id) { ... } // works OK 
    public string Name { get { return GetValue("name"); } } // works OK  

} 

Если я вызываю http://localhost:xxx/Employee.cshtml, содержимое генерирует ОК, если я пытаюсь по умолчанию маршрутизировать http://localhost:xxx/Employee, он также работает.

Возможно ли получить объект Request в абстрактном классе? Я бы не хотел, чтобы я стал истинным способом MVC, это бы усложнило это.

Update: Я понимаю, что я могу добавить вызов шаблон cshtml как:

@{ 
    this.LoadEmployeeById(Request.QueryString); 
} 

и обрабатывать его из класса, только «кто и как/когда выполняет мой шаблон с рабочим контекстом «Часть неясна для меня.

+0

Что вы пытаетесь сделать, так это то, что вы обычно делаете с WebForms. Есть ли конкретная причина, почему вы просто не идете в этом направлении? Кажется, ваша цель - победить всю цель использования MVC. Возможно, я ошибаюсь, но только моя первоначальная мысль. – cloudstrifebro

+0

@Richard_D: Я прочитал [this] (http://stackoverflow.com/a/5125873/65189) комментарий: «Мы не используем MVC, просто ASP.NET с бритвенными страницами, сопоставленными с модулем URL Rewrite для IIS 7, не ASPX-страницы или ViewState или серверное программирование событий вообще. У него нет дополнительных (ненужных) слоев, MVC помещает в конструкции кода для вызова regex. Меньше для нас больше ». и понравилась идея, и хотел расследовать :) – balint

+0

Ahhh, я вижу. MVC отлично подходит по этой причине - это не заставляет программистов абстрагироваться от HTTP (webforms делает это для вас). Я был более смущен, потому что вы используете код-позади (что делает веб-формы по умолчанию). – cloudstrifebro

ответ

0

хорошо, просто использовать это в коде:

HttpContext.Current.Request.QueryString["id"] 

и все работает, как ожидалось.

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