Ответы пользователя Чак Норрис - CodeHelper

Чак Норрис

Чак Норрис
Карма 3384
Имя Неизвестно
Возраст Неизвестно
Сайт Неизвестно
Twitter Неизвестно
Участвует в проекте 1103 дн., 22 час., 55 мин.
Последняя активность 535 дн., 7 час., 46 мин. назад
О себе ничего не указано

Ответы

Новые Лучшие
1
2
3
4
5
6
...
12
Перейти к вопросу →

Можно использовать excanvas. Чтобы всё заработало, достаточно включить скрипт:

<head>
<!--[if IE]><script src="excanvas.js"></script><![endif]-->
</head>

Если canvas создаётся динамически, то после создания нужно вызывать такой код:

var el = document.createElement('canvas');
G_vmlCanvasManager.initElement(el);
var ctx = el.getContext('2d');

Для ознакомления можно посмотреть примеры библиотеки flot (построение графиков на canvas), в которых используется excanvas. В IE эти примеры работают также как в остальных браузерах.

Перейти к вопросу →

Стандартный класс RedirectResult и соответствующий метод Redirect контроллера не подойдут, потому что они осуществляют врЕменное перенаправление с кодом 302. Лучший вариант — создать собственный класс, унаследованный от ActionResult.

public class PermanentRedirectResult : ActionResult
{
    public string Location { get; set; }

    public PermanentRedirectResult(string location)
    {
        Location = location;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        context.HttpContext.Response.StatusCode = 301;
        context.HttpContext.Response.RedirectLocation = Location;
        context.HttpContext.Response.End();
    }
}
Перейти к вопросу →

Пока единственное найденное решение — передавать с запросом дополнительное значение:

isAjax = true

И на стороне сервера использовать стандартный метод IsAjaxRequest вместе с проверкой на наличие этого параметра:

bool IsAjaxRequest(){
    return Request.IsAjaxRequest() || 
           Request.Params["isAjax"] == "true";
}
Перейти к вопросу →

Я не очень много работал с WPF, но описанная вещь — это, вероятно, фишка Routed Events. Суть в том, что событие сгенерированное элементом дерева контролов может быть обработано любым другим вышестоящим элементом в иерархии. В данном случае при изменении в ComboBox возникает событие, которое обрабатывается родительским контейнером.

Перейти к вопросу →

Метод Cookies.Remove удаляет cookie из коллекции на сервере. Естественно, у клиента при этом всё остаётся без изменений. Чтобы удалить cookie с клиента нужно создавать новый объект HttpCookie с тем же именем и задать Expires в прошедшую дату:

if (Request.Cookies["Key"] != null)
{
    var cookie = new HttpCookie("Key")
        {
            Expires = DateTime.Now.AddDays(-1d)
        };
    Response.Cookies.Add(cookie);
}
Перейти к вопросу →

Строку подключения можно брать из секции appSettings файла App.config/Web.config. Для этого в конфигурации Fluent NHibernate нужно написать:

var config = Fluently.Configure()
      .Database(
        MsSqlConfiguration.MsSql2005
          .ConnectionString(c => c
              .FromAppSetting("MainConnectionString"))
      )
      .Mappings(m =>
        m.FluentMappings.AddFromAssemblyOf<KidMap>())
      .BuildConfiguration();

В файле App.config (или Web.config):

<configuration>
    <!-- ... -->
    <appSettings>
      <add 
        key="MainConnectionString"
        value="Data Source=.\SQLEXPRESS;Initial Catalog=TestDB;User Id=sa;Password=*****" />
    </appSettings>
    <!-- ... -->
</configuration>
Перейти к вопросу →

Есть два типа структурных элементов для композиции, которые может определить пользователь:

  • User Control
  • Custom Control

User Control — это часть разметки, выделенная в отдельный ascx файл. Создание и редактирование такого контрола очень похоже на создание обычных веб-страниц. Рендеринг такого контрола требует наличия ascx файла на диске. Эти контролы как туалетная бумага — не подлежат повторному использованию между проектами. Единственная возможность — скопировать файл в другой проект.

Custom Control — это класс, унаследованный от Control или WebControl. Такой вариант идеально подходит для повторного использования, потому что контрол является обычным классом, который может быть размещен в любой сборке. Но теряется возможность редактирования в редакторе VS.

Выводы. Если нужно повторное использование и расположение контрола в другой сборке, то лучше создать Custom Control. User Control все-таки можно расположить в другой сборке, но это требует долгих танцев с бубном.

Перейти к вопросу →

Можно использовать объект класса JavaScriptSerializer, который включен в .NET 3.5 Sp 1 (пространство имен System.Web.Script.Serialization, сборка System.Web.Extensions). Этот объект преобразует строку JSON в граф объектов. Соответственно, для всей структуры JSON должны быть объявлены C#-классы с одноименными свойствами или полями. Например, имеем такой JSON:

{
    "name": "category_name",
    "description": "some description",
    "products": [
        {"name": "product1", "id": "p1"},
        {"name": "product2", "id": "p2"}
    ]
}

Для преобразования такой строки в объекты нужно объявить классы:

public class Product 
{
    public string Id { get; set; }

    public string Name { get; set; }
}

public class Category 
{
    public string Name { get; set; }

    public string Description { get; set; }

    public IList<Product> Products { get; set; }
}

Теперь для преобразования JSON в граф можно выполнить код:

var serializer = new JavaScriptSerializer();
var data = serializer.Deserialize<Category>(jsonString);
Перейти к вопросу →

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

var currentNode = navigator.OuterXml;
currentNode = currentNode.Replace("oldNode", "newNode"); 1
navigator.ReplaceSelf(currentNode);

Для пущей безопасности в точке 1 можно использовать не глупый Replace, а что-нибудь с регулярными выражениями.

Перейти к вопросу →

В веб-приложении можно сделать так:

var clientSection = (ClientSection) WebConfigurationManager.GetSection("system.serviceModel/client");
var endpoints = clientSection.Endpoints;

Затем из коллекции endpoins можно достать всё, что нужно:

foreach (ChannelEndpointElement endpoint in Model)
{
    var address = endpoint.Address;
    var name = endpoint.Name;
    // ...
}

1
2
3
4
5
6
...
12
v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.