Как получить доступ к переменным приложения в представлениях asp.net mvc 3 razor?

Возможно, java.util.zip пакет мог бы помочь Вам

, Так как Вы спрашиваете о том, как преобразовать из массива байтов, я думаю (не протестированный), можно использовать метод ByteArrayInputStream

int     read(byte[] b, int off, int len)
          Reads up to len bytes of data into an array of bytes from this input stream.

, что Вы будете питаться к

ZipInputStream  This class implements an input stream filter for reading files in the ZIP file format.

27
задан Darin Dimitrov 12 March 2011 в 23:34
поделиться

4 ответа

Представления не должны извлекать данные откуда-либо. Предполагается, что они будут использовать данные, которые были переданы им в виде модели представления из действия контроллера. Поэтому, если вам нужно использовать такие данные в представлении, правильный способ сделать это состоит в том, чтобы определить модель представления:

public class MyViewModel
{
    public string LicenseName { get; set; }
}

ваш контроллер должен заполнить его, откуда бы он ни был заполнен (для лучшего разделения Вы можете использовать репозиторий):

public ActionResult Index()
{
    var model = new MyViewModel
    {
        LicenseName = HttpContext.Application["LICENSE_NAME"] as string
    };
    return View(model);
}

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

<div>@Model.LicenseName</div>

Это правильный шаблон MVC и вот как должно быть сделано.

Избегайте представлений, которые извлекают данные как вредные, потому что сегодня это состояние приложения, завтра это цикл foreach, на следующей неделе это запрос LINQ, и вы сразу же будете писать запросы SQL в своих представлениях.

65
ответ дан 28 November 2019 в 04:07
поделиться

Опираясь на шаблон @Darin-Dimitrov, на который я ответил выше, я передал модель в частичное представление, которое я загрузил на страницу _Layout.

Мне нужно было загрузить веб-страницу с внешнего ресурса в Application Load, который будет использоваться в качестве заголовка навигации по нескольким сайтам. Это в моем Global.asax.cs

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    Application["HeaderNav"] = GetHtmlPage("https://site.com/HeaderNav.html");
}

static string GetHtmlPage(string strURL)
{
    string strResult;
    var objRequest = HttpWebRequest.Create(strURL);
    var objResponse = objRequest.GetResponse();
    using (var sr = new StreamReader(objResponse.GetResponseStream()))
    {
        strResult = sr.ReadToEnd();
        sr.Close();
    }
    return strResult;
}

Вот мой Action контроллера для частичного просмотра.

public class ProfileController : BaseController
{
    public ActionResult HeaderNav()
    {
        var model = new Models.HeaderModel
        {
            NavigationHtml = HttpContext.Application["HeaderNav"] as string
        };
        return PartialView("_Header", model);
    }
}

Я загрузил частичное представление на странице _Layout следующим образом.

<div id="header">
     @{Html.RenderAction("HeaderNav", "Profile");}
</div>

Частичное представление _Header.cshtml очень просто и просто загружает html из переменной приложения.

@model Models.HeaderModel
@MvcHtmlString.Create(Model.NavigationHtml)
4
ответ дан 28 November 2019 в 04:07
поделиться

Вы должны иметь возможность получить доступ к этому через HttpContext.Current.Application[], однако лучшие практики MVC утверждают, что вам, вероятно, следует рассмотреть возможность передачи этого через вашу модель представления.

5
ответ дан 28 November 2019 в 04:07
поделиться

Я имел эту проблему в контроллере MVC и должен был сделать полностью определенный HttpContext для него для работы..

System.Web.HttpContext.Current.Application["VarName"]
0
ответ дан 28 November 2019 в 04:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: