Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 提交表单后返回消息_C#_Asp.net Mvc_Asp.net Mvc 2_Asp.net Mail - Fatal编程技术网

C# 提交表单后返回消息

C# 提交表单后返回消息,c#,asp.net-mvc,asp.net-mvc-2,asp.net-mail,C#,Asp.net Mvc,Asp.net Mvc 2,Asp.net Mail,我很抱歉,如果这已经张贴过。我已经搜索了很多网站和表单来修复它,但我找不到它。我有一个简单的联系表格,允许潜在客户填写他们的信息,点击提交,然后通过电子邮件将他们输入的内容发送给我们。我的电子邮件部分工作得很好。但是,表单提交后,不起作用的部分是消息。我尝试在他们提交时使用try-and-catch来显示消息,或者在消息不起作用时使用err消息。不知道为什么它不起作用。谢谢你的帮助。我的控制器代码如下 public ActionResult ContactForm() { return

我很抱歉,如果这已经张贴过。我已经搜索了很多网站和表单来修复它,但我找不到它。我有一个简单的联系表格,允许潜在客户填写他们的信息,点击提交,然后通过电子邮件将他们输入的内容发送给我们。我的电子邮件部分工作得很好。但是,表单提交后,不起作用的部分是消息。我尝试在他们提交时使用try-and-catch来显示消息,或者在消息不起作用时使用err消息。不知道为什么它不起作用。谢谢你的帮助。我的控制器代码如下

public ActionResult ContactForm()
{
    return View();
}
public ActionResult Message()
{
    return View();
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ContactForm(ContactModel emailModel)
{
    if (ModelState.IsValid)
    {
    bool isOk = false;
    try
    {
        MailMessage msg = new MailMessage();
        msg.From = new MailAddress("no-reply@bobcravens.com",  "Website Contact Form");
        msg.To.Add("thovden@hovdenoil.com");
        msg.Subject = emailModel.Subject;
        string body = "Name: " + emailModel.Name + "\n"
                    + "Email: " + emailModel.Email + "\n"
                    + "Website: " + emailModel.Website + "\n"
                    + "Phone: " + emailModel.Phone + "\n\n"
                    + emailModel.Message;

        msg.Body = body;
        msg.IsBodyHtml = false;

        SmtpClient smtp = new SmtpClient("smtpout.server.net", 25);
        NetworkCredential Credentials = new NetworkCredential("thovden@hovdenoil.com", "****");
        smtp.Credentials = Credentials;
        smtp.Send(msg);
        msg.Dispose();
        isOk = true
        ContactModel rcpt = new ContactModel();
        rcpt.Title = "Thank You";
                    rcpt.Content = "Your email has been sent.";
                    return View("Message", rcpt);
        }
        catch (Exception ex)
        {
        }
        // If we are here...something kicked us into the exception.
        //
       ContactModel err = new ContactModel();
        err.Title = "Email Error";
        err.Content = "The website is having an issue with sending email at this time. Sorry for the inconvenience. My email address is provided on the about page.";
        return View("Message", err);
        }
        else
        {
            return View();
        }
    }
 }

我将首先发出异常,这样您就可以准确地找出哪里出了问题。此外,您可能需要单步执行代码。

问题在于您返回的视图:

return View("Messgae", err):
在“
postback
”出错后,您应该返回相同的视图,并且模型无效

return View(err);
有一次你用
MessageModel
调用了
Message
视图,在这一行中你用
ContactModel
调用了它,所以这里一定有一个错误

旁注:
  • 您正在捕获全局
    异常
    异常这不是一个好的做法。并不是所有你可以而且应该处理的异常
  • 您有一个
    isOK
    标志,它不起任何作用
  • 将异常句柄移动到
    catch
    块内,而不是之后

根据评论更新:

您应该重定向以下内容,而不是返回视图:

return RedirectToAction("Message", err);
return RedirectToAction("Message", rcpt);

public ActionResult Message(ContactModel model)
{
    return View(model);
}

关于ContactModel和MessageModel,我很抱歉。他们以前被纠正过。我在胡闹,然后复制粘贴了错误的代码。我已更新代码以反映正确的models@LarsHovden. 到底是什么不起作用?您没有提到任何有关此问题的内容。不起作用的部分是表单提交后要显示的消息—无论表单是否已成功通过电子邮件发送,或者是否存在错误—我是否将公共操作结果消息(ContactModel){return View(model);}放在每个消息之后RedirectToAction@LarsHovden. 它应该是控制器级别的操作方法。