似乎无法将表单值(在视图中)传递给控制器

Posted

技术标签:

【中文标题】似乎无法将表单值(在视图中)传递给控制器【英文标题】:Can't seem to get form values (in view) to the controller 【发布时间】:2016-05-09 12:35:40 【问题描述】:

我这里有 2 位代码。

这是我目前的控制器:

using System;
using System.Net.Mail;
using System.Web.Mvc;
using WebMatrix.Data;

namespace Best_prototype_01.Controllers

    public class RecrutaController : Controller
    
        public ActionResult Index()
        
            return View();
        

            protected void btnSubmit_Click(object sender, EventArgs e)
        
            try
            
                MailMessage Msg = new MailMessage();
                // Sender e-mail address.
                Msg.From = new MailAddress(txtEmail.Text);
                // Recipient e-mail address.
                Msg.To.Add("administrator@aspdotnet-suresh.com");
                Msg.Subject = txtSubject.Text;
                Msg.Body = txtMessage.Text;
                // your remote SMTP server IP.
                SmtpClient smtp = new SmtpClient();
                smtp.Host = "smtp.gmail.com";
                smtp.Port = 587;
                smtp.Credentials = new System.Net.NetworkCredential("yourgmailemail@gmail.com", "yourpassword");
                smtp.EnableSsl = true;
                smtp.Send(Msg);
                //Msg = null;
                lbltxt.Text = "Thanks for Contact us";
                // Clear the textbox valuess
                txtName.Text = "";
                txtSubject.Text = "";
                txtMessage.Text = "";
                txtEmail.Text = "";
            
            catch (Exception ex)
            
                Console.WriteLine("0 Exception caught.", ex);
            
        

    


这是应该与之相关的视图(无论如何重要的部分):

<form id="form1"  >
    <div>
        <table cellspacing="2" cellpadding="2" border="0">
            <tr><td></td><td><b>Contact Us Form</b></td></tr>
            <tr><td><b>Name</b></td><td><asp:TextBox ID="txtName"   /></td></tr>
            <tr><td><b>Email</b></td><td><asp:TextBox ID="txtEmail"   /></td></tr>
            <tr><td><b>Subject</b></td><td><asp:TextBox ID="txtSubject"   /></td></tr>
            <tr><td valign="top"><b>Message</b></td><td> <asp:TextBox ID="txtMessage" Rows="5" Columns="40" TextMode="MultiLine"   /></td></tr>
            <tr><td></td><td><asp:button ID="btnSubmit" Text="Submit"   onclick="btnSubmit_Click" CssClass="Button" /></td></tr>
            <tr><td colspan="2" style=" color:red"><asp:Label ID="lbltxt"   /></td></tr>
        </table>
    </div>
</form>

有人能指出我正确的方向吗?我不知道我做错了什么。

【问题讨论】:

这是网页表单代码,不是 asp.net-mvc! MVC 中没有事件。建议你去 MVC 网站学习基础知识。 冷静点兄弟,不是每个人都是编程高手,我是新手,我正在努力学习,不如实际帮助我而不是小便?跨度> 是的,@Ruben Pereira,请先了解asp.net-mvc 基础知识w3schools.com/aspnet/mvc_intro.asp 为什么解释什么这么难?如果它是如此“基本”,那么请解释我做错了什么,我来这里是为了学习不要被砸。 这里不是教室,也不是提示网站。没有人的工作是向你解释事情。你研究过你的问题吗?看起来你没有。一旦你有一个明确的错误,然后你来这里发布(如果问题不存在) 【参考方案1】:

您的控制器中没有 xyz_Click() 事件。你所拥有的是所谓的ActionResults 你需要的是 a) 在您的视图上定义表单中的目标操作:

@using (html.BeginForm("NameOfYour ActionResult", "NameOfController", FormMethod.Post, new  enctype = "multipart/form-data", @name = "someformname"))
    
        @Html.AntiForgeryToken()
//your form code with inputs, combos etc.

顺便说一句,AntiForgeryToken 可以防止跨站点发布。

然后在你的控制器中创建 ActionResult:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult NameOfYourActionResult(FormCollection fcol)

//your form evaluation goes here. All your form data is accessible through fcol, e.g. like this:
//Msg.From = new MailAddress(fcol["txtEmail"]);

除此之外:是的,请先了解 MVC 基础知识。它与 Web 表单有很大不同。 w3schools.com/aspnet/mvc_intro.asp

【讨论】:

谢谢,我现在知道我做错了什么,我什至不知道 Web Forms 与 MVC 完全不同。

以上是关于似乎无法将表单值(在视图中)传递给控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何将复杂的键值参数表单视图传递给mvc中的控制器?

无法快速显示第一个视图控制器将值传递给第二个视图控制器

尝试将计算值传递给没有控制器的视图

如何将字符串中的加号从视图传递给控制器​​?

将 foreign_key 值传递给 Rails 控制器的更好方法

在 uicollectionview 上录制时将图像快速传递给详细视图控制器