Чак Норрис
- Вопросы
- Ответы
Имя | Неизвестно |
Возраст | Неизвестно |
Сайт | Неизвестно |
Неизвестно | |
Участвует в проекте | 1103 дн., 22 час., 55 мин. |
Последняя активность | 535 дн., 7 час., 46 мин. назад |
Ответы
Перейти к вопросу →
Вручную из RouteData
извлекать не обязательно, достаточно прописать эти параметры в аргументах метода:
[HttpGet]
public ActionResult addLine(int id, int pid)
{
OrgForm newline = new OrgForm();
TempData["curPer"] = pid; // для ссылки "Назад" в текущий период
TempData["curFrm"] = id; // для ссылки "Отмена"
return PartialView("partAddInOrgForm", newline);
}
[HttpPost]
public ActionResult addLine(OrgForm lineAdd, int id, int pid)
{
int cfrm = id;
Form frm = db.Forms.Where(f => f.formID == cfrm).First();
lineAdd.Form = frm;
int cper = pid;
Period per = db.Periods.Where(p => p.perID == cper).First();
lineAdd.FPeriorm d= fperm;
db.AddToOrgForms(lineAdd);
db.SaveChanges();
List<OrgForm> orgFrm = (from of in db.OrgForms where of.perID == cper && of.formID == cfrm orderby of.lineCod select of).ToList();
return PartialView("partOrgForms", orgFrm);
}
Еще нужно убедиться, что параметр pid передаётся в POST-параметрах, т.к. если при извлечении pid вылетает подобная ошибка, то вероятно это значение вообще не было передано на сервер.
Перейти к вопросу →
Есть хорошая статья по этому поводу:
http://www.sovavsiti.cz/css/hr.html
Общий вывод из статьи такой — стилизовать HR
очень сложно. Потому что каждый браузер отображает его по-свойму. Opera, например, рисует вокруг HR
бордюр, который нельзя убрать. Есть проблемы и с хромом. Самое простое решение для кроссбраузерной стилизации — отказаться от HR
и использовать обычный DIV
.
Перейти к вопросу →
Нужно использовать атрибут ServiceKnownType
и применять его в интерфейсе сервиса (на сам интерфейс или на отдельный метод):
[OperationContract]
[ServiceKnownType(typeof(HashHead))]
[WebGet(UriTemplate = "Head1", ResponseFormat = WebMessageFormat.Json)]
MyMessage GetJsonHead1()
{
JsonMessage result = new JsonMessage();
result.Head = new HashHead("test","test");
return result;
}
Перейти к вопросу →
Вообще, метод RenderWebPart
пишет в поток вывода текстовую разметку и ресурсы должны подгружаться браузером отдельно, например с использованием того же HttpHandler
'а. Конечно, в описанной архитектуре это не очень удобно. Если есть возможность переделать, то желательно хранить картинку на диске, а в базе хранить только путь. Тогда в методе RenderWebPart
достаточно будет генерировать теги с указанием пути
а дальше браузер сам запросит файл у сервера. В крайнем случае, если нельзя переделать на файлы, хотя бы хранить картинку в отдельном поле таблицы базы, чтобы хендлеру не пришлось доставать её из документа.
Есть еще варианты встраивания данных картинки прямо в текстовый HTML, но такие подходы работают не во всех браузерах:
1 Использование src=data
Данные файла картинки можно встроить в текстовом формате в атрибут src
:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAFSDNYfAAAAaklEQVR42u3XQQrAIAwAQeP%2F%2F6wf8CJBJTK9lnQ7FpHGaOurt1I34nfH9pMMZAZ8BwMGEvvh%2BBsJCAgICLwIOA8EBAQEBAQEBAQEBK79H5RfIQAAAAAAAAAAAAAAAAAAAAAAAAAAAID%2FABMSqAfj%2FsLmvAAAAABJRU5ErkJggg%3D%3D" alt="" />
Получается вот что:
Недостаток: не работает в IE до версии 8.
2 Конвертация картинки в HTML
Метод для особых извращенцев, но работает даже в IE. Суть — картинка конвертируется в набор HTML-тегов, которые при визуальном формировании в браузере выглядят как исходное изображение. Вот пример. Но такая конвертация, наверное, может занять больше времени чем чтение из базы)
Перейти к вопросу →
Статический метод WebConfigurationManager.GetSection
по идее должен возвращать секцию текущего приложения. Но, возможно, если его вызвать не в том месте, то конфигурация не подцепается. Можно попробовать подгрузить её вручную:
var config = WebConfigurationManager.OpenWebConfiguration("/");
MayConfiguration configSection = (MayConfiguration) config.GetSection(
"MayConfiguration");
Перейти к вопросу →
В веб-приложении можно сделать так:
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;
// ...
}
Перейти к вопросу →
Если сервисы работают под .NET 3.5, то проблема обычно решается прописыванием примерно таких строк в web.config:
<system.serviceModel>
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://example.org:1234" />
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
Где выделенный адрес — это базовый URL для всех сервисов. Подробнее о проблеме можно почитать в статье How can WCF support multiple IIS Binding specified per site ?
Перейти к вопросу →
Нужно пометить enum
атрибутом DataContract
, а все значения — атрибутом EnumMember
:
[DataContract]
public enum SomeEnum
{
[EnumMember]
Value1,
[EnumMember]
Value2,
[EnumMember]
Value3
}
Перейти к вопросу →
Нужно использовать свойства из категории Loyout
. Значения этих свойств позволяют полностью управлять компановкой элементов. Вот некоторые из них:
Свойство Dock — позволяет задать область контейнера, которую будет занимать данный элемент (весь контейнер или вся верхняя/нижняя/левая/правая часть контейнера).
Свойство Anchor — позволяет задать стратегию изменении размера элемента при изменении размера его контейнера. Можно отметить любой из флагов — Left
, Right
, Top
, Bottom
. Комбинируя эти флаги, можно добиться того, чтобы элемент (кнопка, поле ввода и т.п.) был «привязан» к одному из краёв формы или наоборот — занимал область, пропорциональную размеру формы.
Перейти к вопросу →
Нужно создать WCF сервис, который будет содержать всю серверную логику (подсчитывать количество рисунков и возвращать ссылки на них). На стороне silverlight нужно будет вызвать методы этого сервиса и создать элементы Image
, указав в Source
абсолютную ссылку на изображение.
Интерфейс сервиса может быть таким:
public IImageService
{
IList<string> GetImagesUrlList();
}
В silverlight:
// Создаём экземпляр сервиса
IImageService service = GetImageService();
foreach(var url in service.GetImagesUrlList())
{
Uri uri = new Uri(url, UriKind.Absolute);
Image imageControl = new Image();
imageControl.Source = new BitmapImage(uri);
// тут нужно дополнительно настроить контрол
// imageControl, например, задать размер и тп.
// Потом нужно добавить imageControl в какой-то
// контейнер на форме.
}