从DisplayFor(ASP.NET MVC)获取价值

时间:2017-03-11 14:48:20

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

我有DisplayFor Field,我从表中显示数据。

我需要向用户发送电子邮件(使用他的电子邮件,这是我在DisplayFor中的价值)

我在Controller中发送此代码以发送电子邮件。

这是:

      public ActionResult SendEmail(SmartSolutions.Models.Clients _objModelMail, string email)
    {        
            MailMessage mail = new MailMessage();
            mail.To.Add(email);
            mail.From = new MailAddress(_objModelMail.From = "suhomlin.eugene93@gmail.com");
            mail.Subject = _objModelMail.Subject = "Данные для входа";
            string Body = _objModelMail.Body = "Ваши данные для входа это ваш Email"+" Ваш пароль"+_objModelMail.Password;
            mail.Body = Body;
            mail.IsBodyHtml = true;
            SmtpClient smtp = new SmtpClient();
            smtp.Host = "smtp.gmail.com";
            smtp.Port = 587;
            smtp.UseDefaultCredentials = false;
            smtp.Credentials = new System.Net.NetworkCredential
            ("********", "*********");// Enter seders User name and password
            smtp.EnableSsl = true;
            smtp.Send(mail);
            return View("SendEmail", _objModelMail );


    }

有效。我尝试将DisplayFor的值发送到方法string email

所以在视图中我有这个代码

  <td style="text-align: center;">
    @Html.DisplayFor(modelItem => item.Email,null,"email")
  </td>

但是,当我点按“提交”按钮时,它会告诉我这个 enter image description here

如果我将DisplayFor更改为EditorFor,一切正常。

客户模型

 public int ID { get; set; }
    [Required]
    [Display(Name = "Email")]
    [EmailAddress]
    public string Email { get; set; }
    [Display(Name = "Ф.И.О")]
    public string UserName { get; set; }
    [Display(Name = "Должность")]
    public string Position { get; set; }
    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Пароль")]
    public string Password { get; set; }
    public string From { get; set; }
    public string Subject { get; set; }
    public string Body { get; set; }

我如何为DisplayFor做这个?

2 个答案:

答案 0 :(得分:1)

实际上@Html.DisplayFor()只做一次旅行意味着它只会显示价值而不是相反的方式,当你提交表单时,它会提交隐藏字段,文本框等的值,如果你想定义一个自定义字段并获得该值,您可以使用@Html.Hidden并像这样使用它

@Html.Hidden("clientEmail",item.Email) first overload设置隐藏字段的名称,second overload设置隐藏字段的值,最后使用

 public ActionResult SendEmail(SmartSolutions.Models.Clients _objModelMail, string clientEmail)
    {   

    }

答案 1 :(得分:0)

在视图中,添加以下行:

@Html.HiddenFor(modelItem => item.Email);

这样,当您调用控制器(SendEmail)中的帖子操作时,该属性的值将不会丢失。

您需要做的下一件事是从控制器中删除email参数。由于模型现在包含属性中的值,因此您实际上可以使用模型,因此在控制器中更改此行:

mail.To.Add(_objModelMail.Email);    // was mail.To.Add(email);