2013-08-22 3 views
2

Я создал приложение MVC 4. Там у меня есть некоторые просмотры. Каждое из этих представлений отображается либо в браузере, либо в виде электронного письма.Доступ к модели страницы через вызов WebService

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

У меня есть вызов веб-службы, который «просматривает» страницу и получает ее источник и применяет ее как HTML в теле письма, а затем я использую System.Net.Mail.

Теперь, в вызове WebService, мне нужно получить доступ к некоторым значениям Модели обслуживаемой страницы. Возможно ли это? Я делаю это совершенно неправильно? Есть ли у вас какие-либо предложения?

Обе страницы и WebService находятся в одном проекте.

Обновление Моя фактическая проблема заключается в том, что делать с изображениями. Я хочу либо внедрить их (для электронной почты), либо предоставить ссылку (для браузера). Так что моя модель имеет изображения в \

list<System.IO.Stream> 

мнение оказывает частичное HTML, который выглядит как:

@model MyProject.Models.ImageTag 
@if (@Model.ContentType == 2) 
{ 
    <img src="cid:@Model.ImageReference"border="0" alt="" /> 
} 
else 
{ 
    <img src="http://www.mysite.com/images/@Model.PropertyId/@Model.Photo" border="0" alt="" /> 
} 

Веб-сервис должен «знать» образы для того, чтобы добавить их в LinkedResources :

foreach (MyProject.Models.Images image in Model.Images) 
{ 
    LinkedResource lr = new LinkedResource(image.image, "image/jpeg"); 
    lr.ContentId = image.Name; 
    lr.TransferEncoding = System.Net.Mime.TransferEncoding.Base64; 
    lrc.Add(lr); 
} 

Вышеуказанное не будет работать, конечно, поскольку модели нет. Так что это моя проблема.

Model.Images является

List<Img> 

где IMG является

public class Img 
{ 
    public string Name { get; set; } 
    public System.IO.Stream image {get;set;} 
} 
+0

Вы будете использовать значения как часть подготовки сообщения электронной почты или другую цель целиком? –

+0

@PanagiotisKanavos Kallimera ... Я буду использовать значения в своем веб-сервисе. То, что я хочу, - это доступ к списку в модели, содержащей изображения, которые я хочу встроить в электронное письмо, если оно отображается как тело электронной почты. Если это нужно сделать в браузере, я хочу просто добавить ссылки на изображения. –

ответ

0

Да, я бы сказал, что вы делаете это неправильно. Целью представления является предоставление данных модели в любое требуемое представление: содержимое сообщения электронной почты, отдельные значения, отформатированные, например. как json или обычный текст, или и то, и другое.

Есть несколько вариантов для возвращения различных видов информации из того же точки зрения:

  • Вы можете вернуть многосекционный ответ на HTTP, который является своим родом сложных для обработки на стороне клиента, но вы получите оба типа контента с тем же вызовом
  • Вы можете вернуть значения, например, Json, если присутствует необязательный параметр запроса, вместо представления HTML. Для возврата обоих ответов вам потребуются два отдельных вызова.
  • Вы можете создать отдельный вид, чтобы вернуть дополнительные данные
  • Вы можете вернуть дополнительные данные в виде HTTP-заголовков

Как-то добавляющих данные внутри HTML не является хорошей идеей. Если вы не хотите, чтобы получатели также получали данные, вам нужно будет удалить их из возвращенного HTML перед отправкой электронной почты.

Я бы начал с 4-го варианта, если бы хотел только вернуть 2-3 небольших значения, которые не требуют сложной обработки, иначе я бы создал два отдельных вида.

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

+0

Я очень ценю вашу помощь. Но я меньше недели в MVC. Итак, можете ли вы представить пример 4-го варианта? Он выглядит многообещающим, поскольку мне нужны только ссылки на изображения. –

0

Так что ваша служба загружает HTML из MVC View, и вы хотите поместить значимое поле в этом ответе?

Вы можете использовать несколько вариантов, например:

  • Отправить заголовок HTTP, содержащий значение
  • Поместите значение в HTML-элемент, который вы, например, экстракта с помощью HtmlAgilityPack
  • Запустите HTML с первая строка, содержащая ваше значение, а затем остальную часть HTML

Но, похоже, вы хотите, чтобы страница HTML делала слишком много. Если единственной целью этого представления является рендеринг тела электронной почты, пусть это сделает именно это. Возможно, создайте другой метод службы или структуру JSON, которая даст вам нужные вам значения, и соответствующий URL-адрес, который отображает почтовый шаблон.

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