将 LINQ 结果发送到 ASP.NET MVC 中的另一个函数
Send LINQ result to another function in ASP.NET MVC
我正在开发一个控制器,我在其中查询信息,结果显示在我的控制器的视图中,我通过按 "Send Email" 按钮通过电子邮件发送它们。
这是一个例子:
但是当我想将我的 LINQ 结果传递给 SendEmail()
方法时,出现错误。
LINQ 结果是:
Issue when i press Send Email button
这是我的控制器
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"]
来做,因为我知道这样可以传递值。
即便如此,我也不知道如何解决这个问题。如果我放置一个静态值但我需要放置 LINQ 结果,它会起作用。
我应该怎么做才能在单击按钮时发送电子邮件?
谢谢。
您好,您可以使用 TempData["email"] = s;在你的索引中也使用 TempData.keep("email") 在你的 sendEmail 方法之后得到这个 TempData["email"].
我正在开发一个控制器,我在其中查询信息,结果显示在我的控制器的视图中,我通过按 "Send Email" 按钮通过电子邮件发送它们。
这是一个例子:
但是当我想将我的 LINQ 结果传递给 SendEmail()
方法时,出现错误。
LINQ 结果是:
Issue when i press Send Email button
这是我的控制器
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"]
来做,因为我知道这样可以传递值。
即便如此,我也不知道如何解决这个问题。如果我放置一个静态值但我需要放置 LINQ 结果,它会起作用。
我应该怎么做才能在单击按钮时发送电子邮件?
谢谢。
您好,您可以使用 TempData["email"] = s;在你的索引中也使用 TempData.keep("email") 在你的 sendEmail 方法之后得到这个 TempData["email"].