2014-01-08 2 views
2

\ r \ n появляется на строке?Почему добавляется n n в мою строку?

Попытка использования примера на Rendering ASP.NET MVC Views to String для передачи VIEW в виде строки и отправки по электронной почте. Который должен отправить счет-фактуру продажи по электронной почте пользователю.

Iv'e добавил класс ViewRenderer к моему проекту. Затем добавила функцию ContactSeller в мой контроллер, и скопировал и переименовал вид счета-фактуры в качестве ViewOrderThroughEmail.cshtml

//confirm payment & send invoice as email: 
SendOrderInvoiceAsEmail(Qbcust, orderId); 

private void SendOrderInvoiceAsEmail(QBCustomerRecord QBcust, int orderId) 
{ 
    string email = QBcust.EmailAddress; 
    if (String.IsNullOrWhiteSpace(email)) 
    { 
     _orchardServices.Notifier.Error(T("No E-mail exists for this user. Invoice not sent.")); 
     return; 
    } 

    var siteUrl = "Confirmation of order"; 

    if (_authenticationService.GetAuthenticatedUser() == null) 
     throw new OrchardSecurityException(T("Login Required")); 

    IUser userInfo = _authenticationService.GetAuthenticatedUser(); 

    QBCustomerRecord customer = _qbcustomerService.GetById(QBcust.Id); 

    IEnumerable<OrderRecord> ordersQuery = _orderService.GetOrders(customer.Id); 

    OrderRecord order = ordersQuery.Where(o => o.Id == orderId).FirstOrDefault(); 

    var ids = order.Details.Select(d => d.ProductId); 

    ConvertOrderViewToStringViewModel model = new ConvertOrderViewToStringViewModel { Order = _orderService.GetOrder(orderId), Products = ProductHelper.GetProductLookup(ids, _qbProductService, true) }; 
    model.Order = _orderService.GetOrder(orderId); 

    OrderSignatureRecord signatureRecord = _signatureService.GetByOrderId(orderId); 
    if (signatureRecord != null) 
    { 
     model.PathToSignature = _mediaService.GetPublicUrl(signatureRecord.PathToImageFile); 
       model.TypedName = signatureRecord.TypedName; 
    } 

    model.Payment = _paymentService.GetPaymentByOrderId(orderId); 

    string orderInvoiceEmailAsString = ConvertViewToString(model); 
    _userService.SendEmail(email, siteUrl, orderInvoiceEmailAsString); 

    _orchardServices.Notifier.Information(T("The user will receive a confirmation of their order through email.")); 
} 

public string ConvertViewToString(ConvertOrderViewToStringViewModel model) 
{ 
    string message = ViewRenderer.RenderView("~/Modules/StormTree/Views/Account/ViewOrderThroughEmail.cshtml",model, ControllerContext); 

    return message; 
} 

Я прошел через представляемое функции электронной почты, и я знаю, от тестирования, что отправка электронной почты не проблема. Проблема с электронной почтой.

public bool SendEmail(string usernameOrEmail, string title, string viewAsString) 
{ 
    var lowerName = usernameOrEmail.ToLowerInvariant(); 
    var user = _contentManager.Query<UserPart, UserPartRecord>().Where(u => u.NormalizedUserName == lowerName || u.Email == lowerName).List().FirstOrDefault(); 

    if (user != null) 
    { 
     string nonce = CreateNonce(user, DelayToResetPassword); 
     //string url = createUrl(nonce); 
     string url = title; 

     _messageManager.Send(user.ContentItem.Record, MessageTypes.LostPassword, "email", new Dictionary<string, string> { { "LostPasswordUrl", url } }); 
     return true; 
    } 

    return false; 
} 

Так я breakpointed и проверил параметр 'viewAsString' прошел в: возвращает:

"\r\n\r\n<div class=\"span6\">\r\n <fieldset>\r\n  <h2 style=\"color:Red;\">Order details</h2>\r\n   <table style=\"border-bottom-color:Lime;\" class=\"table-bordered table-striped table\">\r\n    <colgroup>\r\n     <col id=\"Col1\" />\r\n     <col id=\"Col2\" />\r\n     <col id=\"Col3\" />\r\n     <col id=\"Col4\" />\r\n     <col id=\"Col5\" />\r\n    </colgroup>\r\n    <thead>\r\n     <tr>\r\n      <th scope=\"col\">Code</th>\r\n      <th scope=\"col\">Product</th>\r\n      <th scope=\"col\">Unit Price</th>\r\n      <th scope=\"col\">Quantity</th>\r\n      <th scope=\"col\">Value</th>\r\n     </tr>\r\n    </thead>\r\n    <tbody>\r\n      <tr>\r\n       <td>APPBRAMSI</td>\r\n       <td>Single cooking apples</td>\r\n       <td>&#163;0.00</td>\r\n       <td>3</td>\r\n       <td>&#163;0.00</td>\r\n      </tr>\r\n      <tr>\r\n       <td>BUTTER SQ</td>\r\n       <td>Butternut Squash</td>\r\n       <td>&#163;0.00</td>\r\n       <td>5</td>\r\n       <td>&#163;0.00</td>\r\n      </tr>\r\n      <tr>\r\n       <td>bcf5</td>\r\n       <td>Broccolli &amp; Cauliflour Mix 5kg</td>\r\n       <td>&#163;0.00</td>\r\n       <td>2</td>\r\n       <td>&#163;0.00</td>\r\n      </tr>\r\n      <tr>\r\n       <td>EGGS TRAY</td>\r\n       <td>tray eggs</td>\r\n       <td>&#163;0.00</td>\r\n       <td>1</td>\r\n       <td>&#163;0.00</td>\r\n      </tr>\r\n      <tr>\r\n       <td>savoy single</td>\r\n       <td>Savoy Cabbage 1*</td>\r\n       <td>&#163;0.00</td>\r\n       <td>9</td>\r\n       <td>&#163;0.00</td>\r\n      </tr>\r\n     <tr>\r\n      <td></td>\r\n      <td></td>\r\n      <td></td>\r\n      <td><strong>Sub-Total</strong></td>\r\n      <td><strong>&#163;0.00</strong></td>\r\n     </tr>\r\n     <tr>\r\n      <td></td>\r\n      <td></td>\r\n      <td></td>\r\n      <td><strong>VAT</strong></td>\r\n      <td><strong>&#163;0.00</strong></td>\r\n     </tr>\r\n     <tr>\r\n      <td></td>\r\n      <td></td>\r\n      <td></td>\r\n      <td><strong>Total</strong></td>\r\n      <td><strong>&#163;0.00</strong></td>\r\n     </tr>\r\n    </tbody>\r\n   </table>\r\n </fieldset>\r\n</div>\r\n\r\n<div class=\"span4\">\r\n <fieldset>\r\n  <h2>Order information</h2>\r\n\r\n  <div class=\"editor-label\"><label for=\"Order_CreatedAt\">Order Last Updated</label></div>\r\n  <div class=\"editor-field\"><input class=\"uneditable-input\" id=\"Order_CreatedAt\" name=\"Order.CreatedAt\" readonly=\"readonly\" type=\"text\" value=\"19/12/2013 17:19:53\" /></div>\r\n\r\n  <div class=\"editor-label\"><label for=\"Order_Status\">Status</label></div>\r\n  <div class=\"editor-field\"><input class=\"uneditable-input\" id=\"Order_Status\" name=\"Order.Status\" readonly=\"readonly\" type=\"text\" value=\"New\" /></div>\r\n\r\n\r\n\r\n  <p><a href=\"/OrchardLocal/UMACS.Bradmount/CustomerAdmin/AddToCurrentOrder/171\" title=\"Add this order to Current Order\">Add this order to Current Order</a></p>\r\n  <p><a href=\"/OrchardLocal/UMACS.Bradmount/CustomerAdmin/ClearThenAddToCurrentOrder/171\" title=\"Change Current Order To Match This Order\">Change Current Order To Match This Order</a></p>\r\n  <p><a href=\"/OrchardLocal/UMACS.Bradmount/CustomerAdmin\" title=\"Back to My Account\">Go back to My Account</a></p>\r\n </fieldset>\r\n</div>\r\n\r\n" 

, который отображает: enter image description here Мой вопрос заключается в том, где находятся все \ г \ п выходить из? Спасибо за любые ответы

UPDATE

public class ConvertOrderViewToStringViewModel 
    { 
     public ConvertOrderViewToStringViewModel() 
     { } 

     public OrderRecord Order; 
     public Dictionary<int, QBProductRecord> Products; 
     public String PathToSignature; 
     public String TypedName; 
     public PaymentRecord Payment; 
    } 
+0

Похоже, что все ускользает, заметьте «в последнем порядке», а также в вашем параметре параметра 'title'. Попытайтесь увидеть, где происходит экранирование, отлаживая код – nrathaus

+0

Вы уверены, что выбрали параметр 'title', а не 'viewAsString'? Поскольку параметр 'title' передается 'siteUrl' и 'siteUrl' инициализируется только с «Подтверждением порядка». После этого он не изменяется. По крайней мере, это то, что я мог видеть из вашего доступного кода. Я думаю, проблема связана с «viewAsString». –

+0

Это новые строковые символы, вы используете ключ ввода или новую строку для отступов отчета? Можете ли вы отправить код конструктора ConvertOrderViewToStringViewModel? –

ответ

1

Может быть его белые пространства, которые на ваш взгляд содержит, когда отформатирован в Visual Studio.

Итак, когда вы конвертировать ваши View в String они заменяются на \r\n, который представляет собой белое пространство & символы новой строки в C#.

Вы можете попробовать удалить каждое пустое пространство с вашего вида, что не требуется. Имеете только html & релевантный контент на ваш взгляд. Затем повторите попытку, отправив электронное письмо. Посмотрите, что произойдет.

+0

Спасибо Devraj ... правильный ответ – John

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