【问题标题】:Emails issues when using TempData使用 TempData 时的电子邮件问题
【发布时间】:2013-09-18 14:40:56
【问题描述】:

我正在为我正在构建的网站使用 MVC 4、C# 和 Razor,但遇到了一个奇怪的问题。

问题与以下代码有关:

Mailer.EmailAdmin(this, model);
Mailer.EmailUser(this, model);

TempData["Message"] = "Your request has been forwarded to the appropriate administrator." 
+ " \n You will be notified when the application has been processed.";

上述两种方法都达到了各自的断点,并按预期将数据传递给相关模型。然而,虽然这两种方法似乎都只发送一封电子邮件,但这始终是“EmailUser”(无论是管理员还是用户电子邮件都放在第一位)。请注意,减去邮件中不同的视图,发送电子邮件的代码完全相同。

一旦从代码中删除了“TempData”,两封电子邮件都会毫无问题地发送出去。

有没有人对为什么会发生这种情况以及可能的解决方法有任何建议?

我没有使用 MVCMailer,而是使用典型的字符串生成器以电子邮件格式呈现视图。 TempData 仅在需要从 ActionResult 持久保存到另一个时使用。

【问题讨论】:

标签: c# asp.net-mvc asp.net-mvc-4 razor tempdata


【解决方案1】:

我喜欢将物品从一个动作带到另一个动作... 创建一个类...

    public class MessageModel
    {
        public virtual string Message { get; set; }
    }

在我的第一个操作结果中..

 var mModel = new SelectionModel.MessageModel
            {
                Message = "my message"
            };

        Session["mModel "] = mModel;  

如果您想更改消息或继续使用相同的消息...

 var mmModel = (SelectionModel.MessageModel)Session["mModel"];
        mmModel.Message = "new message";
        Session["mModel"] = mmModel;

你明白了..不是临时数据的忠实粉丝...

【讨论】:

  • 您不使用和/喜欢 TempData 有什么特别的原因吗?从您自己的消息自定义会话处理程序看来,它的作用类似于 TempData,将数据存储在会话变量中,然后在使用后将其丢弃。
  • 是的,它确实将它存储在会话中,但是一旦你阅读它......噗......它消失了
  • 如果您需要为一个请求保留数据,而不是使用 Tempdata,除此之外,我喜欢确定我保留数据的时间..
【解决方案2】:

您可以完全避免临时数据和会话,而是将文本存储在视图模型的属性中,这通常比使用会话更好。我假设您将消息存储在临时数据中,以便稍后将其显示给用户。然后你可以改为这样做:

public ActionResult SendEmail(MyModel model) {
    Mailer.EmailAdmin(this, model);
    Mailer.EmailUser(this, model);

    MyOtherModel otherModel = new MyOtherModel();
    otherModel.Message = "Your request has been forwarded to the appropriate administrator." 
    + " \n You will be notified when the application has been processed.";

    return View("MyView", otherModel);
}

当然,如果适用相同的模型,您也可以使用相同的模型,或者返回部分视图而不是完整视图。使用局部视图,您可以将其与 ajax 结合以在不刷新页面的情况下显示消息(通过将页面上的现有 div 替换为 ajax 响应,这将是局部视图)。如果文本不是动态的且始终相同,您也可以直接将其放在局部视图中,而不是将其存储在模型中。

【讨论】:

    猜你喜欢
    • 2014-06-23
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    相关资源
    最近更新 更多