Отправьте результат LINQ другой функции в ASP. NET MVC - PullRequest
0 голосов
/ 20 марта 2020

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

Вот пример:

Example

Но когда я хочу передать результаты LINQ методу SendEmail(), я получаю сообщение об ошибке.

Результаты LINQ:

Проблема, когда я нажимаю кнопку «Отправить письмо»

Вот мой контроллер

using System;
using System.IO;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net.Mail;
using System.Web.Mvc;

namespace MvcInventory.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            Entities db = new Entities();
            var s = from sw in db.TB_RS_PROD.Where(x => x.IDPROD == 1)
                    select sw;
            ViewData["email"] = s;
            return View(s);
        }

        protected string RenderPartialViewToString(string viewName, object model)
        {
            if (string.IsNullOrEmpty(viewName))
                viewName = ControllerContext.RouteData.GetRequiredString("action");

            ViewData.Model = model;

            using (StringWriter sw = new StringWriter())
            {
                ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
                ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
                viewResult.View.Render(viewContext, sw);

                return sw.GetStringBuilder().ToString();
            }
        }

        public ActionResult SendEmail()
        {
            var htmlp = RenderPartialViewToString("~/Views/Home/Index.cshtml", ViewData["email"]);
            SmtpClient SmtpServer = new SmtpClient();
            MailMessage mail = new MailMessage();
            SmtpServer.Credentials = new System.Net.NetworkCredential("IT@serv.com", "");
            SmtpServer.Port = 25;
            SmtpServer.Host = "150.147.12.155";
            mail = new MailMessage();
            mail.From = new MailAddress("IT@serv.com", "IT TEAM");
            mail.To.Add("sz@serv.com");
            mail.Subject = "Request";
            mail.IsBodyHtml = true;
            mail.Body = htmlp;
            mail.Priority = MailPriority.High;
            SmtpServer.Send(mail);
            return View("~/Views/Home/About.cshtml");
        }
    }
}

Мой взгляд

@model IEnumerable<MvcInventory.TB_RS_PROD>
@{
}
<html>
<table class="table table-striped">
    <tr>
        <td>ID PRODUCT</td>
        <td>PRODUCT NAME</td>
        <td>QUIANTITY</td>
        <td>DATE</td>
        <td>STATUS</td>
    </tr>
    @foreach (var item in Model)
    {
        <tr>
           <td>@item.IDPROD</td>
           <td>@item.PROD_NAME</td>
           <td>@item.QUANTITY</td>
           <td>@item.UPDATE_DATE</td>
           <td>@item.STATUS</td>
        </tr>
    }
</table>
<button onclick="location.href='@Url.Action("SendEmail","Home")'">Send Email</button>
    </html>

Я хотел сделать это через ViewData["email"], так как я понимаю, что таким образом можно передавать значения.

Несмотря на это, я не знаю, как решить эту проблему. Это работает, если я поставлю значение c, но мне нужно указать результат LINQ.

Что мне делать, чтобы при нажатии на кнопку я мог отправить электронное письмо?

Спасибо вы.

1 Ответ

0 голосов
/ 20 марта 2020

Привет, вы можете использовать TempData ["email"] = s; в вашем индексе также используйте TempData.keep ("email") после того, как и в вашем методе sendEmail получите эту TempData ["email"].

...