#c# #asp.net-mvc #formatting
#c# #asp.net-mvc #форматирование
Вопрос:
Вот мои два действия для отправки электронных писем через MVC:
[HttpGet]
// GET: EmailForms
public ActionResult EmailForm(int id)
{
EmailFormModel emailModel = new EmailFormModel();
ChosenWT cwt = new ChosenWT();
OInfo person= new OInfo();
using (var db = new OWTEntities())
{
cwt = db.ChosenWTs.Find(id);
person= db.OInfoes.Find(cwt.OID);
}
emailModel.Message = "This is paragraph 1.nnThis is paragraph 2.nnThis is paragraph 3." // issue deals with this property
emailModel.FromEmail = User.Identity.Name.Split('\')[1] "@domain.com";
string Logon = Common.GetLogon(person.IBM);
emailModel.ToEmail = Logon "@domain.com";
return View(emailModel);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> EmailForm(EmailFormModel model)
{
if (ModelState.IsValid)
{
var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
var message = new MailMessage();
message.To.Add(new MailAddress(model.ToEmail));
message.From = new MailAddress(model.FromEmail);
message.Subject = "Test Program";
message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message); // This doesn't keep the paragraph formatting like in the [HttpGet] Action.. Instead it just combines it all into 1 big paragraph..
message.IsBodyHtml = true;
using (var smtp = new SmtpClient())
{
smtp.Host = "smtp.test.server";
await smtp.SendMailAsync(message);
return RedirectToAction("Index", "OInfoes");
}
}
return View(model);
}
Если вы прочитали комментарии, которые я вставил в приведенный выше код, это проблема с этим кодом.
Я могу отформатировать Message
так, чтобы при первом заходе пользователя на страницу строка форматировалась в виде абзаца .. но когда я нажимаю Отправить, HttpPost
действие принимает сообщение и игнорирует nn
и объединяет все это в один гигантский абзац.
Итак, я попытался включить <p></p>
символы в строку, но когда я нажимаю отправить, я получаю сообщение об ошибке, в котором говорится, что эти символы потенциально опасны.
Есть ли способ, чтобы форматирование оставалось неизменным при отправке?
Любая помощь приветствуется.
Комментарии:
1. какова точная ошибка?
Ответ №1:
Причина, по которой вы получаете ошибку, заключается в том, что при отправке формы платформа asp.met mvc проверяет тело запроса на предмет наличия в нем потенциально опасного содержимого в виде HTML-разметки (подумайте о внедрении скрипта). Если он обнаружит какое-либо опасное содержимое, модуль проверки запроса выдаст сообщение об ошибке. Это сделано специально
Вы можете применить AllowHtml
атрибут к свойству, которое содержит разметку html в вашем классе модели представления, чтобы платформа проверки запроса не отклоняла отправленные данные.
public class EmailFormModel
{
[AllowHtml]
public string Message { set;get;}
public string FromEmail {set;get;}
//Other properties of view model goes here
}
Комментарии:
1. Ах, это сработало. Я знал, что означает ошибка.. Я не имел в виду, что эта часть вопроса должна быть в центре внимания.. Я просто хотел знать, есть ли способ сохранить форматирование.
2. Если вы
IsBodyHtml
установили значение true и указали html-метку (например,<p>
теги). Это должно сработать.